64 lines
1.8 KiB
C
64 lines
1.8 KiB
C
#include <pthread.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
#include <time.h>
|
|
#include <string.h>
|
|
#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;
|
|
}
|