Fix an issue where the log option is not applied properly
[platform/upstream/connman.git] / include / log.h
old mode 100644 (file)
new mode 100755 (executable)
index 8a0b5a5..9403633
@@ -2,7 +2,7 @@
  *
  *  Connection Manager
  *
- *  Copyright (C) 2007-2008  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2007-2013  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
 #ifndef __CONNMAN_LOG_H
 #define __CONNMAN_LOG_H
 
+#if defined TIZEN_EXT
+#include <stdbool.h>
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-extern void connman_info(const char *format, ...);
-extern void connman_error(const char *format, ...);
-extern void connman_debug(const char *format, ...);
+/**
+ * SECTION:log
+ * @title: Logging premitives
+ * @short_description: Functions for logging error and debug information
+ */
+
+void connman_info(const char *format, ...)
+                               __attribute__((format(printf, 1, 2)));
+void connman_warn(const char *format, ...)
+                               __attribute__((format(printf, 1, 2)));
+void connman_error(const char *format, ...)
+                               __attribute__((format(printf, 1, 2)));
+void connman_debug(const char *format, ...)
+                               __attribute__((format(printf, 1, 2)));
+
+#define connman_warn_once(fmt, arg...) do {            \
+       static bool printed;                            \
+       if (!printed) {                                 \
+               connman_warn(fmt, ## arg);              \
+               printed = true;                         \
+       }                                               \
+} while (0)
+
+struct connman_debug_desc {
+       const char *name;
+       const char *file;
+#if defined TIZEN_EXT
+#define CONNMAN_DEBUG_FLAG_DEFAULT (1)
+#else
+#define CONNMAN_DEBUG_FLAG_DEFAULT (0)
+#endif
+#define CONNMAN_DEBUG_FLAG_PRINT   (1 << 0)
+#define CONNMAN_DEBUG_FLAG_ALIAS   (1 << 1)
+       unsigned int flags;
+} __attribute__((aligned(8)));
+
+#define CONNMAN_DEBUG_DEFINE(name) \
+       static struct connman_debug_desc __debug_alias_ ## name \
+       __attribute__((used, section("__debug"), aligned(8))) = { \
+               #name, __FILE__, CONNMAN_DEBUG_FLAG_ALIAS \
+       };
+
+/**
+ * DBG:
+ * @fmt: format string
+ * @arg...: list of arguments
+ *
+ * Simple macro around connman_debug() which also include the function
+ * name it is called in.
+ */
+#define DBG(fmt, arg...) do { \
+       static struct connman_debug_desc __connman_debug_desc \
+       __attribute__((used, section("__debug"), aligned(8))) = { \
+               .file = __FILE__, .flags = CONNMAN_DEBUG_FLAG_DEFAULT, \
+       }; \
+       if (__connman_debug_desc.flags & CONNMAN_DEBUG_FLAG_PRINT) \
+               connman_debug("%s:%s() " fmt, \
+                                       __FILE__, __FUNCTION__ , ## arg); \
+} while (0)
 
-#define DBG(fmt, arg...) connman_debug("%s:%s() " fmt, __FILE__, __FUNCTION__ , ## arg)
+#if defined TIZEN_EXT
+#define simplified_log get_simple_log_option()
+bool get_simple_log_option(void);
+void set_simple_log_option(bool option);
+void set_dlog_logging_option(bool option);
+void set_file_logging_option(bool option);
+#endif
 
 #ifdef __cplusplus
 }