diff options
Diffstat (limited to 'common/eurephia_log.h')
-rw-r--r-- | common/eurephia_log.h | 49 |
1 files changed, 47 insertions, 2 deletions
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 <stdarg.h> #include <eurephia_log_struct.h> #include <eurephia_context.h> +#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_ */ |