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