From 71a667ecb879f2d23dd275c5fed2faf326bcee0b Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Tue, 17 Nov 2015 07:34:20 +0900 Subject: [PATCH] Fix variable argument handling with log_hint()/log_verbose() --- log.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/log.c b/log.c index 818101dc..6f9972e6 100644 --- a/log.c +++ b/log.c @@ -40,6 +40,7 @@ /* #define REPMGR_DEBUG */ static int detect_log_facility(const char *facility); +static void _stderr_log_with_level(const char *level_name, int level, const char *fmt, va_list ap); int log_type = REPMGR_STDERR; int log_level = LOG_NOTICE; @@ -49,11 +50,20 @@ int terse_logging = false; void stderr_log_with_level(const char *level_name, int level, const char *fmt, ...) +{ + va_list arglist; + + va_start(arglist, fmt); + _stderr_log_with_level(level_name, level, fmt, arglist); + va_end(arglist); +} + +static void +_stderr_log_with_level(const char *level_name, int level, const char *fmt, va_list ap) { time_t t; struct tm *tm; char buff[100]; - va_list ap; /* * Store the requested level so that if there's a subsequent @@ -68,9 +78,7 @@ stderr_log_with_level(const char *level_name, int level, const char *fmt, ...) strftime(buff, 100, "[%Y-%m-%d %H:%M:%S]", tm); fprintf(stderr, "%s [%s] ", buff, level_name); - va_start(ap, fmt); vfprintf(stderr, fmt, ap); - va_end(ap); fflush(stderr); } @@ -84,7 +92,7 @@ log_hint(const char *fmt, ...) if (terse_logging == false) { va_start(ap, fmt); - stderr_log_with_level("HINT", last_log_level, fmt, ap); + _stderr_log_with_level("HINT", last_log_level, fmt, ap); va_end(ap); } } @@ -102,28 +110,28 @@ log_verbose(int level, const char *fmt, ...) switch(level) { case LOG_EMERG: - log_emerg(fmt, ap); + _stderr_log_with_level("EMERG", level, fmt, ap); break; case LOG_ALERT: - log_alert(fmt, ap); + _stderr_log_with_level("ALERT", level, fmt, ap); break; case LOG_CRIT: - log_crit(fmt, ap); + _stderr_log_with_level("CRIT", level, fmt, ap); break; case LOG_ERR: - log_err(fmt, ap); + _stderr_log_with_level("ERR", level, fmt, ap); break; case LOG_WARNING: - log_warning(fmt, ap); + _stderr_log_with_level("WARNING", level, fmt, ap); break; case LOG_NOTICE: - log_notice(fmt, ap); + _stderr_log_with_level("NOTICE", level, fmt, ap); break; case LOG_INFO: - log_info(fmt, ap); + _stderr_log_with_level("INFO", level, fmt, ap); break; case LOG_DEBUG: - log_debug(fmt, ap); + _stderr_log_with_level("DEBUG", level, fmt, ap); break; } } @@ -131,6 +139,7 @@ log_verbose(int level, const char *fmt, ...) va_end(ap); } + bool logger_init(t_configuration_options * opts, const char *ident, const char *level, const char *facility) {