From 11b2cfa087f5de09b97eb42fb219f563886f6d40 Mon Sep 17 00:00:00 2001 From: Joel Stålnacke Date: Sun, 13 Oct 2024 14:32:14 +0300 Subject: Add libdjup logging --- lib/log.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lib/log.c (limited to 'lib/log.c') diff --git a/lib/log.c b/lib/log.c new file mode 100644 index 0000000..51ab107 --- /dev/null +++ b/lib/log.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include + +#include "log.h" + +/* Message buffer */ +#define MBUF_SIZE 512 + +static void (*log_output)(int level, const char *source, int line, const char *msg) = NULL; +static int min_level = LOGL_INFO; + +void +dp_log_set_output(void (*output)(int, const char *, int, const char *)) +{ + log_output = output; +} + +void +dp_log_set_level(int level) +{ + min_level = level; +} + +void +dp_log_write(int level, const char *source, int line, const char *fmt, ...) +{ + char mbuf[MBUF_SIZE]; + char *msg; + va_list va; + int len; + + if (level < min_level) + return; + if (!log_output) + return; + + msg = mbuf; + va_start(va, fmt); + len = vsnprintf(msg, MBUF_SIZE, fmt, va); + va_end(va); + + if (len >= MBUF_SIZE) + { + msg = (char *)malloc(len + 1); + va_start(va, fmt); + len = vsnprintf(msg, len + 1, fmt, va); + va_end(va); + } + + log_output(level, source, line, msg); + + if (msg != mbuf) + free(msg); +} -- cgit v1.2.3