Note that this doesn't make a ton of sense with the toggle_debug stuff. My initial version of this removed support for toggle_debug, but I reworked it to keep it in. If people aren't actually using it, it probably doesn't make much sense to keep.
ofono_debug() becomes a macro; as things within ofono start to define zones, hopefully __ofono_debug can replace it. I just didn't want a patch that touched *everything*. >From 465a54dc411fdfbf3088c7057844ad46d376859e Mon Sep 17 00:00:00 2001 From: Andres Salomon <[email protected]> Date: Wed, 5 Aug 2009 16:20:02 -0400 Subject: [PATCH 1/2] ofono: add zoned debug support This adds debug flags so that when users are debugging, they can pass arguments to --debug to specify what they want shown. --debug without any args defaults to prior behavior. --- include/log.h | 10 ++++++++-- src/log.c | 11 +++++++---- src/main.c | 25 +++++++++++++++++++++++-- src/ofono.h | 2 +- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/include/log.h b/include/log.h index 47e5ec8..ef2c663 100644 --- a/include/log.h +++ b/include/log.h @@ -26,6 +26,10 @@ extern "C" { #endif +typedef enum { + OFONO_DEBUG_CORE = 1 << 0, +} ofono_debug_flags; + /** * SECTION:log * @title: Logging premitives @@ -36,8 +40,10 @@ extern void ofono_info(const char *format, ...) __attribute__((format(printf, 1, 2))); extern void ofono_error(const char *format, ...) __attribute__((format(printf, 1, 2))); -extern void ofono_debug(const char *format, ...) - __attribute__((format(printf, 1, 2))); +extern void __ofono_debug(ofono_debug_flags flag, const char *format, ...) + __attribute__((format(printf, 2, 3))); +#define ofono_debug(format, ...) \ + __ofono_debug(OFONO_DEBUG_CORE, (format), ##__VA_ARGS__) /** * DBG: diff --git a/src/log.c b/src/log.c index 273e3ba..167fe21 100644 --- a/src/log.c +++ b/src/log.c @@ -29,6 +29,7 @@ #include "ofono.h" static volatile gboolean debug_enabled = FALSE; +static guint debug_flags; /** * ofono_info: @@ -67,7 +68,8 @@ void ofono_error(const char *format, ...) } /** - * ofono_debug: + * __ofono_debug: + * @flag: zone flag (ie, OFONO_DEBUG_CORE) * @format: format string * @varargs: list of arguments * @@ -76,11 +78,11 @@ void ofono_error(const char *format, ...) * The actual output of the debug message is controlled via a command line * switch. If not enabled, these messages will be ignored. */ -void ofono_debug(const char *format, ...) +void __ofono_debug(ofono_debug_flags flag, const char *format, ...) { va_list ap; - if (debug_enabled == FALSE) + if (!debug_enabled || !(debug_flags & flag)) return; va_start(ap, format); @@ -98,7 +100,7 @@ void __ofono_toggle_debug(void) debug_enabled = TRUE; } -int __ofono_log_init(gboolean detach, gboolean debug) +int __ofono_log_init(gboolean detach, gboolean debug, guint dflags) { int option = LOG_NDELAY | LOG_PID; @@ -110,6 +112,7 @@ int __ofono_log_init(gboolean detach, gboolean debug) syslog(LOG_INFO, "oFono version %s", VERSION); debug_enabled = debug; + debug_flags = dflags; return 0; } diff --git a/src/main.c b/src/main.c index 7542e13..7227bde 100644 --- a/src/main.c +++ b/src/main.c @@ -54,12 +54,33 @@ static void system_bus_disconnected(DBusConnection *conn, void *user_data) static gboolean option_detach = TRUE; static gboolean option_debug = FALSE; +static guint debug_flags = 0; + +static GDebugKey keys[] = { + { "core", OFONO_DEBUG_CORE }, +}; + +static gboolean parse_debug_flags(const gchar *option_name, const gchar *value, + gpointer data, GError **err) +{ + option_debug = TRUE; + + /* NULL means no string was supplied to --debug. We default to "core" + * in that scenario; perhaps we should be defaulting to "all" instead? */ + if (!value) + value = "core"; + + debug_flags = g_parse_debug_string(value, keys, + sizeof(keys) / sizeof(keys[0])); + return TRUE; +} static GOptionEntry options[] = { { "nodetach", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &option_detach, "Don't run as daemon in background" }, - { "debug", 'd', 0, G_OPTION_ARG_NONE, &option_debug, + { "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG, + G_OPTION_ARG_CALLBACK, &parse_debug_flags, "Enable debug information output" }, { NULL }, }; @@ -109,7 +130,7 @@ int main(int argc, char **argv) } #endif - __ofono_log_init(option_detach, option_debug); + __ofono_log_init(option_detach, option_debug, debug_flags); dbus_error_init(&error); diff --git a/src/ofono.h b/src/ofono.h index 63f33ad..c791c2d 100644 --- a/src/ofono.h +++ b/src/ofono.h @@ -30,7 +30,7 @@ const char **__ofono_modem_get_list(); #include <ofono/log.h> -int __ofono_log_init(gboolean detach, gboolean debug); +int __ofono_log_init(gboolean detach, gboolean debug, guint dflags); void __ofono_log_cleanup(void); void __ofono_toggle_debug(void); -- 1.6.3.3 _______________________________________________ ofono mailing list [email protected] http://lists.ofono.org/listinfo/ofono
