From 68e8a199a8f1ac925df44c8638cc283b1a98b62d Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Mon, 26 Oct 2015 10:28:05 +0100 Subject: [PATCH] mx_log: Add mx_logva*() to use va lists when logging --- mx_log.c | 17 +++++++++++++---- mx_log.h | 11 +++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/mx_log.c b/mx_log.c index e9332b3e..ba5a8d55 100644 --- a/mx_log.c +++ b/mx_log.c @@ -137,12 +137,11 @@ static int log_log(int level, int loglevel, char *file, unsigned long line, cons return mx_log_printf("%s%s", prefix, msg); } -int mx_log_do(int level, char *file, unsigned long line, const char *func, const char *fmt, ...) +int mx_logva_do(int level, char *file, unsigned long line, const char *func, const char *fmt, va_list ap) { int loglevel; int len; char *msg = NULL; - va_list ap; int res; int preserved_errno = errno; @@ -153,9 +152,7 @@ int mx_log_do(int level, char *file, unsigned long line, const char *func, const return 0; } - va_start(ap, fmt); len = vasprintf(&msg, fmt, ap); - va_end(ap); if (len == -1) { errno = preserved_errno; @@ -173,6 +170,18 @@ int mx_log_do(int level, char *file, unsigned long line, const char *func, const return res; } +int mx_log_do(int level, char *file, unsigned long line, const char *func, const char *fmt, ...) +{ + va_list ap; + int res; + + va_start(ap, fmt); + res = mx_logva_do(level, file, line, func, fmt, ap); + va_end(ap); + + return res; +} + int mx_log_finish(void) { if (mx_log_log) diff --git a/mx_log.h b/mx_log.h index 48c60988..8b17631f 100644 --- a/mx_log.h +++ b/mx_log.h @@ -22,6 +22,7 @@ #define MX_LOG_DEBUG MX_LOG_SYSLOG_TO_MXLOG(LOG_DEBUG) /* debug-level messages */ #define mx_log(level, fmt, ...) mx_log_do((level), __FILE__, __LINE__, __func__, (fmt), ##__VA_ARGS__) +#define mx_logva(level, fmt, ap) mx_logva_do((level), __FILE__, __LINE__, __func__, (fmt), (ap)) #define mx_log_fatal(fmt, ...) mx_log(MX_LOG_EMERG, (fmt), ##__VA_ARGS__) #define mx_log_emerg(fmt, ...) mx_log(MX_LOG_EMERG, (fmt), ##__VA_ARGS__) @@ -33,6 +34,16 @@ #define mx_log_info(fmt, ...) mx_log(MX_LOG_INFO, (fmt), ##__VA_ARGS__) #define mx_log_debug(fmt, ...) mx_log(MX_LOG_DEBUG, (fmt), ##__VA_ARGS__) +#define mx_logva_fatal(fmt, ap) mx_log(MX_LOG_EMERG, (fmt), (ap)) +#define mx_logva_emerg(fmt, ap) mx_log(MX_LOG_EMERG, (fmt), (ap)) +#define mx_logva_alert(fmt, ap) mx_log(MX_LOG_ALERT, (fmt), (ap)) +#define mx_logva_crit(fmt, ap) mx_log(MX_LOG_CRIT, (fmt), (ap)) +#define mx_logva_err(fmt, ap) mx_log(MX_LOG_ERR, (fmt), (ap)) +#define mx_logva_warning(fmt, ap) mx_log(MX_LOG_WARNING, (fmt), (ap)) +#define mx_logva_notice(fmt, ap) mx_log(MX_LOG_NOTICE, (fmt), (ap)) +#define mx_logva_info(fmt, ap) mx_log(MX_LOG_INFO, (fmt), (ap)) +#define mx_logva_debug(fmt, ap) mx_log(MX_LOG_DEBUG, (fmt), (ap)) + int mx_log_log(int level, int loglevel, char *file, unsigned long line, const char *func, const char *msg) __attribute__ ((weak)); int mx_log_print(char *msg, size_t len) __attribute__ ((weak));