#include #include #include #include #include #include #include "utils.h" #include "settings.h" #include "ansicolor.h" pthread_mutex_t logLock = PTHREAD_MUTEX_INITIALIZER; void logMessage(enum severity messageSeverity, const char *format, ...) { pthread_mutex_lock(&logLock); time_t timeNow = time(0); printf(" [%.24s]", ctime(&timeNow)); switch (messageSeverity) { case warning: printf(ANSI_YELLOW " [WARN] "); break; case error: printf(ANSI_RED " [ERROR] "); break; default: printf(ANSI_GREEN " [INFO] "); break; } va_list args; va_start(args, format); vprintf(format, args); va_end(args); printf(ANSI_RESET"\n"); pthread_mutex_unlock(&logLock); } // WARNING: this method may increment the 'str' pointer. void trimWhitespace(char* str) { char *end; while(isspace((unsigned char)*str)) str++; if(*str == 0) return; end = str + strlen(str) - 1; while(end > str && isspace((unsigned char)*end)) end--; end[1] = '\0'; } int inRange(int number, int rangeFrom, int rangeTo) { return number >= rangeFrom && number <= rangeTo; } int sanitizeString(char* str, size_t stringLength) { if (stringLength == 0) return 0; char newString[stringLength+1]; int newStringCurrent = 0; for (int i = 0; i < stringLength; ++i) { if (inRange(str[i], 32, 126)) { newString[newStringCurrent] = str[i]; // copy (allowed character) newStringCurrent++; } } newString[newStringCurrent] = 0; memcpy(str, newString, newStringCurrent+1); return newStringCurrent; }