#include "../include/util.h" #include "../include/error.h" #include "../include/types.h" #include #include #include #include #include void pdebug(lm_ctx_t *ctx, const char *func, const char *fmt, ...) { if (!ctx->debug) 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; } bool parse_host(char *addr, char *host, uint16_t *port) { char *save = NULL, *portc = NULL; int portint = 0; if ((host = strtok_r(addr, ":", &save)) == NULL) { lm_error_set(LM_ERR_BadHost); return false; } if ((portc = strtok_r(NULL, ":", &save)) == NULL) { *port = 0; return true; } portint = atoi(portc); if (portint <= 0 || portint > UINT16_MAX) { lm_error_set(LM_ERR_BadPort); return false; } *port = portint; return true; } 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; }