diff options
Diffstat (limited to 'src/un_log.c')
-rw-r--r-- | src/un_log.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/un_log.c b/src/un_log.c new file mode 100644 index 0000000..ef5bb02 --- /dev/null +++ b/src/un_log.c @@ -0,0 +1,71 @@ +#include <stdio.h> + +Log_Level un_current_log_level = UN_LOG_INFO; + +u8 log_buffer[UN_KB(4)]; + +void un_log_write_internal(Log_Level level, String format, va_list vaptr) { + if (level < un_current_log_level) return; + + switch (level) { + case UN_LOG_TRACE: + fprintf(stderr, "[TRACE] "); + break; + case UN_LOG_DEBUG: + fprintf(stderr, "[DEBUG] "); + break; + case UN_LOG_INFO: + fprintf(stderr, "[INFO] "); + break; + case UN_LOG_WARNING: + fprintf(stderr, "[WARNING] "); + break; + case UN_LOG_ERROR: + fprintf(stderr, "[ERROR] "); + break; + case UN_LOG_FATAL: + fprintf(stderr, "[FATAL] "); + break; + default: + break; + } + + sprintf(CSTR log_buffer, "%.*s", (int)format.size, format.data); + vfprintf(stderr, CSTR log_buffer, vaptr); + + switch (level) { + case UN_LOG_RAW: + break; + case UN_LOG_FATAL: + fprintf(stderr, "\n"); + assert(false); + break; + default: + fprintf(stderr, "\n"); + break; + } +} + +extern void un_log_write_cstring(Log_Level level, u8 *format, ...) { + va_list vaptr; + String temp; + + if (level < un_current_log_level) return; + + temp.size = un_string_get_length(format); + temp.data = format; + + va_start(vaptr, format); + un_log_write_internal(level, temp, vaptr); + va_end(vaptr); +} + +void un_log_write(Log_Level level, String format, ...) { + va_list vaptr; + + if (level < un_current_log_level) return; + + va_start(vaptr, format); + un_log_write_internal(level, format, vaptr); + va_end(vaptr); +} |