From ebf4e80250b525e173397fbe5c0018d922c5d42a Mon Sep 17 00:00:00 2001 From: David Sommerseth Date: Mon, 25 Jul 2011 13:56:39 +0200 Subject: common: Rework eurephia_log() to include also veurephia_log() veurephia_log() is to eurephia_log() what vprintf() is to printf(), taking va_list and const char *fmt arguments directly. Signed-off-by: David Sommerseth --- common/eurephia_log.c | 15 ++++++--------- common/eurephia_log.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 11 deletions(-) (limited to 'common') diff --git a/common/eurephia_log.c b/common/eurephia_log.c index 7c4ace6..157b2d5 100644 --- a/common/eurephia_log.c +++ b/common/eurephia_log.c @@ -202,8 +202,9 @@ static void file_log(FILE *log, int logdst, int loglvl, const char *file, const pthread_mutex_unlock(&log_mutex); // Unblock other threads } + /** - * Internal function. This function should normally be called via the eurephia_log() function. + * Internal function. This function should normally be called via the veurephia_log() function. * * @param ctx eurephiaCTX * @param logdst Log destination, can be LOG_INFO, LOG_DEBUG, LOG_WARNING, LOG_ERROR, @@ -212,18 +213,15 @@ static void file_log(FILE *log, int logdst, int loglvl, const char *file, const * than what this parameter is set to, the message will not be logged. * @param file String containing file name of the place this function was called. Usually the __FILE__ macro. * @param line Line number of the source file this function was called. Usually the __LINE__ macro. - * @param fmt Contents of the log message (stdarg) + * @param ap stdarg's va_list data + * @param fmt stdarg's char *fmt pointer */ -void _eurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *file, const int line, - const char *fmt, ... ) +void _veurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *file, const int line, + va_list ap, const char *fmt) { - // Only log if we have an open log file and which has high enough log level if( (ctx != NULL) && (ctx->log != NULL) && (ctx->log->opened == 1) && (ctx->log->loglevel >= loglvl) ) { - va_list ap; - - va_start(ap, fmt); switch( ctx->log->logtype ) { case logFILE: file_log(ctx->log->logfile, logdst, loglvl, file, line, fmt, ap); @@ -232,7 +230,6 @@ void _eurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *fi vsyslog(syslog_priority[logdst], fmt, ap); break; } - va_end(ap); } } diff --git a/common/eurephia_log.h b/common/eurephia_log.h index ac81958..84da754 100644 --- a/common/eurephia_log.h +++ b/common/eurephia_log.h @@ -31,9 +31,18 @@ #ifndef EUREPHIA_LOG_H_ #define EUREPHIA_LOG_H_ +#include #include #include +#ifdef __GNUC__ +/** Avoid GNU C compiler to complain about unused functions - only used where this is a false positive */ +#define __CC_ATTR_USED__ __attribute__ ((used)) +#else +/** For non GNU C compilers, make this just a NOOP */ +#define __CC_ATTR_USED__ +#endif + #ifdef ENABLE_DEBUG #warning ###### DEBUG LOGGING IS ENABLED - THIS COULD BE A SECURITY ISSUE ###### /** @@ -67,6 +76,42 @@ void eurephia_log_close(eurephiaCTX *ctx); * @param log_string The message to be logged */ #define eurephia_log(ctx, dst, lvl, log_string...) _eurephia_log_func(ctx, dst, lvl, __FILE__, __LINE__, ## log_string) -void _eurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *file, int line, - const char *fmt, ... ); + +/** + * stdarg variaint of eurephia_log(). This takes the va_list ap and char *fmt pointers directly + * Frontend wrapper for the _veurephia_log_func() function. + * + * @param ctx eurephiaCTX + * @param dst Log destination/priority (LOG_INFO, LOG_PANIC, LOG_ERROR, etc) + * @param lvl Verbosity level of the message + * @param log_string The message to be logged + */ +#define veurephia_log(ctx, dst, lvl, va_ap, fmt) _veurephia_log_func(ctx, dst, lvl, __FILE__, __LINE__, ## log_string) +void _veurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *file, int line, + va_list ap, const char *fmt); + +/** + * Internal function. This function should normally be called via the eurephia_log() function. + * + * @param ctx eurephiaCTX + * @param logdst Log destination, can be LOG_INFO, LOG_DEBUG, LOG_WARNING, LOG_ERROR, + * LOG_CRITICAL, LOG_FATAL or LOG_PANIC + * @param loglvl Log level of the message. If the eurephiaCTX has a lower log level setup + * than what this parameter is set to, the message will not be logged. + * @param file String containing file name of the place this function was called. Usually the __FILE__ macro. + * @param line Line number of the source file this function was called. Usually the __LINE__ macro. + * @param fmt Contents of the log message (stdarg) + * + */ +static void __CC_ATTR_USED__ _eurephia_log_func(eurephiaCTX *ctx, int logdst, int loglvl, const char *file, int line, + const char *fmt, ... ) +{ + va_list ap; + + va_start(ap, fmt); + _veurephia_log_func(ctx, logdst, loglvl, file, line, ap, fmt); + va_end(ap); +} + + #endif /* !EUREPHIA_LOG_H_ */ -- cgit