diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2006-07-06 20:30:16 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2006-07-06 20:30:16 +0000 |
commit | 4e866367a74e3d2dce1d1c0f4d16b878e09e6a38 (patch) | |
tree | 63ce63ecae2ed702bff3a075c7515ff439258c0a | |
parent | 6d9d3a111e68610b07e9469e89b8c6dad5d09d2a (diff) |
When matching debug flag keys, ignore case and accept any of comma, colon,
2006-07-06 Behdad Esfahbod <behdad@gnome.org>
* glib/gutils.c (g_parse_debug_string): When matching debug flag keys,
ignore case and accept any of comma, colon, semicolon, space, and tab
as separators. Also, match dash with underscore.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-12 | 6 | ||||
-rw-r--r-- | glib/gutils.c | 33 |
3 files changed, 37 insertions, 8 deletions
@@ -1,3 +1,9 @@ +2006-07-06 Behdad Esfahbod <behdad@gnome.org> + + * glib/gutils.c (g_parse_debug_string): When matching debug flag keys, + ignore case and accept any of comma, colon, semicolon, space, and tab + as separators. Also, match dash with underscore. + 2006-07-05 Matthias Clasen <mclasen@redhat.com> * glib/gbase64.c: Fix typos in the docs. (#346660, Mark diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index b4d244297..ccaf7b172 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,9 @@ +2006-07-06 Behdad Esfahbod <behdad@gnome.org> + + * glib/gutils.c (g_parse_debug_string): When matching debug flag keys, + ignore case and accept any of comma, colon, semicolon, space, and tab + as separators. Also, match dash with underscore. + 2006-07-05 Matthias Clasen <mclasen@redhat.com> * glib/gbase64.c: Fix typos in the docs. (#346660, Mark diff --git a/glib/gutils.c b/glib/gutils.c index 792485772..70fb864be 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -38,6 +38,7 @@ #include <stdio.h> #include <locale.h> #include <string.h> +#include <ctype.h> /* For tolower() */ #include <errno.h> #ifdef HAVE_PWD_H #include <pwd.h> @@ -552,16 +553,33 @@ g_find_program_in_path (const gchar *program) return NULL; } +static gboolean +debug_key_matches (const gchar *key, + const gchar *token, + guint length) +{ + for (; length; length--, key++, token++) + { + char k = (*key == '_') ? '-' : tolower (*key ); + char t = (*token == '_') ? '-' : tolower (*token); + + if (k != t) + return FALSE; + } + + return *key == '\0'; +} + /** * g_parse_debug_string: - * @string: a list of debug options separated by ':' or "all" - * to set all flags. + * @string: a list of debug options separated by colons, spaces, or + * commas; or the string "all" to set all flags. * @keys: pointer to an array of #GDebugKey which associate * strings with bit flags. * @nkeys: the number of #GDebugKey<!-- -->s in the array. * - * Parses a string containing debugging options separated - * by ':' into a %guint containing bit flags. This is used + * Parses a string containing debugging options + * into a %guint containing bit flags. This is used * within GDK and GTK+ to parse the debug options passed on the * command line or through environment variables. * @@ -594,17 +612,16 @@ g_parse_debug_string (const gchar *string, while (*p) { - q = strchr (p, ':'); + q = strpbrk (p, ":;, \t"); if (!q) q = p + strlen(p); for (i = 0; i < nkeys; i++) - if (g_ascii_strncasecmp (keys[i].key, p, q - p) == 0 && - keys[i].key[q - p] == '\0') + if (debug_key_matches (keys[i].key, p, q - p)) result |= keys[i].value; p = q; - if (*p == ':') + if (*p) p++; } } |