diff --git a/log.c b/log.c index 8b4e8131..fba53876 100644 --- a/log.c +++ b/log.c @@ -122,43 +122,67 @@ _sys_log(enum log_class log_class, const char *module, syslog(level, "%s: %s", module, msg); } +void +log_msg_va(enum log_class log_class, const char *module, + const char *file, int lineno, const char *fmt, va_list va) +{ + va_list va2; + va_copy(va2, va); + _log(log_class, module, file, lineno, fmt, 0, va); + _sys_log(log_class, module, file, lineno, fmt, 0, va2); + va_end(va2); +} + void log_msg(enum log_class log_class, const char *module, const char *file, int lineno, const char *fmt, ...) { - va_list ap1, ap2; - va_start(ap1, fmt); - va_copy(ap2, ap1); - _log(log_class, module, file, lineno, fmt, 0, ap1); - _sys_log(log_class, module, file, lineno, fmt, 0, ap2); - va_end(ap1); - va_end(ap2); + va_list va; + va_start(va, fmt); + log_msg_va(log_class, module, file, lineno, fmt, va); + va_end(va); } -void log_errno(enum log_class log_class, const char *module, - const char *file, int lineno, - const char *fmt, ...) +void +log_errno_va(enum log_class log_class, const char *module, + const char *file, int lineno, + const char *fmt, va_list va) { - va_list ap1, ap2; - va_start(ap1, fmt); - va_copy(ap2, ap1); - _log(log_class, module, file, lineno, fmt, errno, ap1); - _sys_log(log_class, module, file, lineno, fmt, errno, ap2); - va_end(ap1); - va_end(ap2); + log_errno_provided_va(log_class, module, file, lineno, errno, fmt, va); } -void log_errno_provided(enum log_class log_class, const char *module, - const char *file, int lineno, int errno_copy, - const char *fmt, ...) +void +log_errno(enum log_class log_class, const char *module, + const char *file, int lineno, + const char *fmt, ...) { - va_list ap1, ap2; - va_start(ap1, fmt); - va_copy(ap2, ap1); - _log(log_class, module, file, lineno, fmt, errno_copy, ap1); - _sys_log(log_class, module, file, lineno, fmt, errno_copy, ap2); - va_end(ap1); - va_end(ap2); + va_list va; + va_start(va, fmt); + log_errno_va(log_class, module, file, lineno, fmt, va); + va_end(va); +} + +void +log_errno_provided_va(enum log_class log_class, const char *module, + const char *file, int lineno, int errno_copy, + const char *fmt, va_list va) +{ + va_list va2; + va_copy(va2, va); + _log(log_class, module, file, lineno, fmt, errno_copy, va); + _sys_log(log_class, module, file, lineno, fmt, errno_copy, va2); + va_end(va2); +} + +void +log_errno_provided(enum log_class log_class, const char *module, + const char *file, int lineno, int errno_copy, + const char *fmt, ...) +{ + va_list va; + va_start(va, fmt); + log_errno_provided_va(log_class, module, file, lineno, errno_copy, fmt, va); + va_end(va); } int diff --git a/log.h b/log.h index f0c28d7b..367fd60e 100644 --- a/log.h +++ b/log.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include "macros.h" enum log_colorize { LOG_COLORIZE_NEVER, LOG_COLORIZE_ALWAYS, LOG_COLORIZE_AUTO }; @@ -10,19 +11,34 @@ void log_init(enum log_colorize colorize, bool do_syslog, enum log_facility syslog_facility, enum log_class log_level); void log_deinit(void); -void log_msg(enum log_class log_class, const char *module, - const char *file, int lineno, - const char *fmt, ...) PRINTF(5); +void log_msg( + enum log_class log_class, const char *module, + const char *file, int lineno, + const char *fmt, ...) PRINTF(5); -void log_errno(enum log_class log_class, const char *module, - const char *file, int lineno, - const char *fmt, ...) PRINTF(5); +void log_errno( + enum log_class log_class, const char *module, + const char *file, int lineno, + const char *fmt, ...) PRINTF(5); void log_errno_provided( enum log_class log_class, const char *module, const char *file, int lineno, int _errno, const char *fmt, ...) PRINTF(6); +void log_msg_va( + enum log_class log_class, const char *module, + const char *file, int lineno, const char *fmt, va_list va) VPRINTF(5); +void log_errno_va( + enum log_class log_class, const char *module, + const char *file, int lineno, + const char *fmt, va_list va) VPRINTF(5); +void log_errno_provided_va( + enum log_class log_class, const char *module, + const char *file, int lineno, int _errno, + const char *fmt, va_list va) VPRINTF(6); + + int log_level_from_string(const char *str); const char *log_level_string_hint(void);