summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2011-07-25 13:56:39 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2011-07-25 13:56:39 +0200
commitebf4e80250b525e173397fbe5c0018d922c5d42a (patch)
tree2c92bf3f1218c7d333c9da7417a90828417ae929
parent331d3ff806f4d1b146d8599b1e226e7962f7d7b2 (diff)
downloadeurephia-ebf4e80250b525e173397fbe5c0018d922c5d42a.tar.gz
eurephia-ebf4e80250b525e173397fbe5c0018d922c5d42a.tar.xz
eurephia-ebf4e80250b525e173397fbe5c0018d922c5d42a.zip
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 <dazo@users.sourceforge.net>
-rw-r--r--common/eurephia_log.c15
-rw-r--r--common/eurephia_log.h49
2 files changed, 53 insertions, 11 deletions
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 <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_ */