From 0493875f09621e3495c95199da54b49910cb87fd Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Thu, 05 Oct 2017 01:53:56 -0400 Subject: Revert "src/about.c: Use strtok_r() to parse query strings" This reverts commit a1fa82f65eceddd76861ce132c8b1b9a458eb0de. strtok_r() doesn't properly handle empty tokens, e.g.: tabs.new=&tabs.home=&tabs.background=on&tabs.warn-on-close=on&... --- diff --git a/src/about.c b/src/about.c index c668b94..47d0c5b 100644 --- a/src/about.c +++ b/src/about.c @@ -19,8 +19,6 @@ * along with Marquee. If not, see . */ -#define _POSIX_C_SOURCE 200809L - #include #include @@ -33,18 +31,28 @@ static GHashTable * parse_query_string(gchar *str) { GHashTable *hash_table; - gboolean first; - gchar *saveptr; gchar *key; gchar *val; hash_table = g_hash_table_new(g_str_hash, g_str_equal); - first = TRUE; - while ((key = strtok_r(first ? str : NULL, "=", &saveptr))) { - first = FALSE; - val = strtok_r(NULL, "&", &saveptr); + while (*str) { + key = str; + for (; *str && *str != '='; ++str); + if (!*str) { + g_hash_table_insert(hash_table, key, NULL); + break; + } + *str = '\0'; + val = ++str; + for (; *str && *str != '&'; ++str); + if (!*str) { + g_hash_table_insert(hash_table, key, val); + break; + } + *str = '\0'; g_hash_table_insert(hash_table, key, val); + ++str; } return hash_table; -- cgit v0.9.1