summaryrefslogtreecommitdiffstats
path: root/common/eurephia_log.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/eurephia_log.h')
-rw-r--r--common/eurephia_log.h49
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_ */