run: Wait for children to die.
[dss.git] / log.h
diff --git a/log.h b/log.h
index 5d38c7bfaa74bcda2aad3c0fd8058b936c1a7e47..78ccc1b30b2a55114e55634ca32c09c486c8cbfe 100644 (file)
--- a/log.h
+++ b/log.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2010 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 /** Log messages with lower priority than that will not be compiled in. */
 #define COMPILE_TIME_LOGLEVEL 0
 
+/** Not all compilers support __func__ or an equivalent. */
+#if (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) && !defined(__GNUC__)
+# if defined(_MSC_VER) && _MSC_VER >= 1300
+#  define __func__ __FUNCTION__
+# else
+#  define DSS_NO_FUNC_NAMES
+#  define __func__ "<unknown>"
+# endif
+#endif
+
 /** \cond */
 #if DEBUG > COMPILE_TIME_LOGLEVEL
-#define DSS_DEBUG_LOG(f,...) dss_log(DEBUG, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_DEBUG_LOG(args) \
+       do { \
+               dss_log_set_params(DEBUG, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_DEBUG_LOG(...) do {;} while (0)
+#define DSS_DEBUG_LOG(args) do {;} while (0)
 #endif
 
 #if INFO > COMPILE_TIME_LOGLEVEL
-#define DSS_INFO_LOG(f,...) dss_log(INFO, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_INFO_LOG(args) \
+       do { \
+               dss_log_set_params(INFO, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_INFO_LOG(...) do {;} while (0)
+#define DSS_INFO_LOG(args) do {;} while (0)
 #endif
 
 #if NOTICE > COMPILE_TIME_LOGLEVEL
-#define DSS_NOTICE_LOG(f,...) dss_log(NOTICE, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_NOTICE_LOG(args) \
+       do { \
+               dss_log_set_params(NOTICE, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_NOTICE_LOG(...) do {;} while (0)
+#define DSS_NOTICE_LOG(args) do {;} while (0)
 #endif
 
 #if WARNING > COMPILE_TIME_LOGLEVEL
-#define DSS_WARNING_LOG(f,...) dss_log(WARNING, "%s: " f, __FUNCTION__, ##  __VA_ARGS__)
+#define DSS_WARNING_LOG(args) \
+       do { \
+               dss_log_set_params(WARNING, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_WARNING_LOG(...) do {;} while (0)
+#define DSS_WARNING_LOG(args) do {;} while (0)
 #endif
 
 #if ERROR > COMPILE_TIME_LOGLEVEL
-#define DSS_ERROR_LOG(f,...) dss_log(ERROR, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_ERROR_LOG(args) \
+       do { \
+               dss_log_set_params(ERROR, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_ERROR_LOG(...) do {;} while (0)
+#define DSS_ERROR_LOG(args) do {;} while (0)
 #endif
 
 #if CRIT > COMPILE_TIME_LOGLEVEL
-#define DSS_CRIT_LOG(f,...) dss_log(CRIT, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_CRIT_LOG(args) \
+       do { \
+               dss_log_set_params(CRIT, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_CRIT_LOG(...) do {;} while (0)
+#define DSS_CRIT_LOG(args) do {;} while (0)
 #endif
 
 #if EMERG > COMPILE_TIME_LOGLEVEL
-#define DSS_EMERG_LOG(f,...) dss_log(EMERG, "%s: " f, __FUNCTION__, ## __VA_ARGS__)
+#define DSS_EMERG_LOG(args) \
+       do { \
+               dss_log_set_params(EMERG, __FILE__, __LINE__, __func__); \
+               dss_log args ; \
+       } while (0)
 #else
-#define DSS_EMERG_LOG(...)
+#define DSS_EMERG_LOG(args)
 #endif