aboutsummaryrefslogtreecommitdiff
path: root/src/un_log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/un_log.c')
-rw-r--r--src/un_log.c71
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);
+}