This repository has been archived on 2021-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
lemonbbs/src/utils.c
2021-12-15 18:52:53 +01:00

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;
}