From 771637a91e707f56b6901ec52ea209731cc8f258 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Fri, 23 Sep 2022 10:57:49 +0200 Subject: [PATCH] added log_vprintf --- src/debug.cpp | 30 ++++++++++++++++++++---------- src/debug.h | 1 + 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 8825f5cdf..ebf63462b 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -89,18 +89,18 @@ static void _dprintf(const char *format, ...) #endif /* WIN32 */ } -void log_msg(int level, const char *format, ...) +int log_vprintf(int level, const char *format, va_list ap) { - va_list ap; + va_list aq; if (log_level < level) { - return; + return 0; } // get number of required bytes - va_start(ap, format); - int size = vsnprintf(NULL, 0, format, ap); - va_end(ap); + va_copy(aq, ap); + int size = vsnprintf(NULL, 0, format, aq); + va_end(aq); // format the string auto buf = get_log_output().get_buffer(); @@ -109,12 +109,12 @@ void log_msg(int level, const char *format, ...) buf.append(style); buf.append(size, '\0'); - va_start(ap, format); + va_copy(aq, ap); if (vsprintf(buf.data() + style.length(), format, ap) != size) { - va_end(ap); - return; + va_end(aq); + return 0; } - va_end(ap); + va_end(aq); if (get_log_output().is_interactive()) { auto & str = buf.get(); @@ -125,7 +125,17 @@ void log_msg(int level, const char *format, ...) buf.append(TERM_RESET); } } + int ret = buf.get().size(); buf.submit(); + return ret; +} + +void log_msg(int level, const char *format, ...) { + va_list ap; + va_start(ap, format); + log_vprintf(level, format, ap); + va_end(ap); + } void log_msg_once(int level, uint32_t id, const char *msg) { diff --git a/src/debug.h b/src/debug.h index 363b7d9c6..ca3fcc1b3 100644 --- a/src/debug.h +++ b/src/debug.h @@ -95,6 +95,7 @@ void debug_file_dump(const char *key, void (*serialize)(const void *data, FILE * ///#define debug_msg(...) log_msg(LOG_LEVEL_DEBUG, "[pid/%d +%d %s] ", getpid(), __LINE__, __FILE__), log_msg(LOG_LEVEL_DEBUG, __VA_ARGS__) #define debug_msg(...) log_msg(LOG_LEVEL_DEBUG, __VA_ARGS__) void log_msg(int log_level, const char *format, ...) ATTRIBUTE(format (printf, 2, 3)); +int log_vprintf(int level, const char *format, va_list ap); void log_msg_once(int log_level, uint32_t id, const char *msg); void log_perror(int log_level, const char *msg);