2024-06-20 00:34:32 +00:00
|
|
|
#include "../include/util.h"
|
2024-06-22 04:03:17 +00:00
|
|
|
#include "../include/error.h"
|
2024-06-22 22:55:01 +00:00
|
|
|
#include "../include/types.h"
|
2024-06-22 04:03:17 +00:00
|
|
|
#include <error.h>
|
2024-06-20 00:34:32 +00:00
|
|
|
#include <stdarg.h>
|
2024-06-20 22:36:56 +00:00
|
|
|
#include <stdio.h>
|
2024-06-20 00:34:32 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
2024-06-20 22:36:56 +00:00
|
|
|
void pdebug(lm_ctx_t *ctx, const char *func, const char *fmt, ...) {
|
|
|
|
if (!ctx->debug)
|
2024-06-20 00:34:32 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
|
|
|
|
printf("[DEBUG] %s: ", func);
|
|
|
|
vprintf(fmt, args);
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
va_end(args);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool eq(char *s1, char *s2) {
|
|
|
|
if (NULL == s1 || NULL == s2)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (strlen(s1) != strlen(s2))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return strcmp(s1, s2) == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool is_letter(char c) {
|
|
|
|
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
|
|
|
|
}
|
|
|
|
|
|
|
|
bool is_digit(char c) {
|
|
|
|
return c >= '0' && c <= '9';
|
|
|
|
}
|
|
|
|
|
|
|
|
bool contains(char *str, char s) {
|
|
|
|
for (char *c = str; *c != 0; c++)
|
|
|
|
if (*c == s)
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
2024-06-22 04:03:17 +00:00
|
|
|
|
2024-06-22 22:55:01 +00:00
|
|
|
bool parse_host(char *addr, char *host, uint16_t *port) {
|
2024-06-22 04:03:17 +00:00
|
|
|
char *save = NULL, *portc = NULL;
|
2024-06-22 22:55:01 +00:00
|
|
|
int portint = 0;
|
2024-06-22 04:03:17 +00:00
|
|
|
|
2024-06-22 22:55:01 +00:00
|
|
|
if ((host = strtok_r(addr, ":", &save)) == NULL) {
|
2024-06-22 04:03:17 +00:00
|
|
|
lm_error_set(LM_ERR_BadHost);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2024-06-22 22:55:01 +00:00
|
|
|
if ((portc = strtok_r(NULL, ":", &save)) == NULL) {
|
2024-06-22 04:03:17 +00:00
|
|
|
*port = 0;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
portint = atoi(portc);
|
2024-06-22 22:55:01 +00:00
|
|
|
if (portint <= 0 || portint > UINT16_MAX) {
|
2024-06-22 04:03:17 +00:00
|
|
|
lm_error_set(LM_ERR_BadPort);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
*port = portint;
|
|
|
|
return true;
|
|
|
|
}
|
2024-06-22 22:55:01 +00:00
|
|
|
|
|
|
|
bool copy_to_buffer(void *buffer, void *src, size_t size, ssize_t *total, ssize_t *used) {
|
|
|
|
if (*used + size > *total)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (*used == 0)
|
|
|
|
bzero(buffer, *total);
|
|
|
|
|
|
|
|
memcpy(buffer + *used, src, size);
|
|
|
|
*used += size;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool copy_from_buffer(void *dst, void *buffer, size_t size, ssize_t *total, ssize_t *used) {
|
|
|
|
if (*used + size > *total)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (*used == 0)
|
|
|
|
bzero(dst, size);
|
|
|
|
|
|
|
|
memcpy(dst, buffer + *used, size);
|
|
|
|
*used += size;
|
|
|
|
return true;
|
|
|
|
}
|