diff --git a/ChangeLog b/ChangeLog index 3f282b1d87..296e06548f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-01-12 Tor Lillqvist + + * gdk/gdk.c (gdk_arg_debug_cb) (gdk_arg_no_debug_cb): A + GOptionArgFunc should return gboolean and take also a GError + pointer parameter, so make these two functions do that. Return + FALSE (and set the GError) if the parsing of the debug string + failed completely. Note that g_parse_debug_string() doesn't really + have any way to return parsing status, and accepts partially + incorrect strings, though. + 2009-01-12 Claudio Saavedra Bug 567468 – no check for trailing != NULL in diff --git a/gdk/gdk.c b/gdk/gdk.c index d0ed996cf7..da5d6335c2 100644 --- a/gdk/gdk.c +++ b/gdk/gdk.c @@ -89,20 +89,44 @@ static const int gdk_ndebug_keys = G_N_ELEMENTS (gdk_debug_keys); #endif /* G_ENABLE_DEBUG */ #ifdef G_ENABLE_DEBUG -static void -gdk_arg_debug_cb (const char *key, const char *value, gpointer user_data) +static gboolean +gdk_arg_debug_cb (const char *key, const char *value, gpointer user_data, GError **error) { - _gdk_debug_flags |= g_parse_debug_string (value, + guint debug_value = g_parse_debug_string (value, (GDebugKey *) gdk_debug_keys, gdk_ndebug_keys); + + if (debug_value == 0 && value != NULL && strcmp (value, "") != 0) + { + g_set_error (error, + G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Error parsing option --gdk-debug")); + return FALSE; + } + + _gdk_debug_flags |= debug_value; + + return TRUE; } -static void -gdk_arg_no_debug_cb (const char *key, const char *value, gpointer user_data) +static gboolean +gdk_arg_no_debug_cb (const char *key, const char *value, gpointer user_data, GError **error) { - _gdk_debug_flags &= ~g_parse_debug_string (value, - (GDebugKey *) gdk_debug_keys, - gdk_ndebug_keys); + guint debug_value = g_parse_debug_string (value, + (GDebugKey *) gdk_debug_keys, + gdk_ndebug_keys); + + if (debug_value == 0 && value != NULL && strcmp (value, "") != 0) + { + g_set_error (error, + G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Error parsing option --gdk-no-debug")); + return FALSE; + } + + _gdk_debug_flags &= ~debug_value; + + return TRUE; } #endif /* G_ENABLE_DEBUG */