summaryrefslogtreecommitdiffstats
path: root/src/string-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string-utils.c')
-rw-r--r--src/string-utils.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/string-utils.c b/src/string-utils.c
index 96b5a0e..8484468 100644
--- a/src/string-utils.c
+++ b/src/string-utils.c
@@ -35,3 +35,40 @@ atoi64(const gchar *a)
return 0;
}
}
+
+GHashTable *
+parse_query_string(gchar *str)
+{
+ GHashTable *hash_table;
+ gchar *key;
+ gchar *val;
+
+ hash_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, g_free);
+
+ while (*str) {
+ key = str;
+ for (; *str && *str != '='; ++str);
+ if (!*str) {
+ g_hash_table_insert(hash_table,
+ g_uri_unescape_string(key, NULL), NULL);
+ break;
+ }
+ *str = '\0';
+ val = ++str;
+ for (; *str && *str != '&'; ++str);
+ if (!*str) {
+ g_hash_table_insert(hash_table,
+ g_uri_unescape_string(key, NULL),
+ g_uri_unescape_string(val, NULL));
+ break;
+ }
+ *str = '\0';
+ g_hash_table_insert(hash_table,
+ g_uri_unescape_string(key, NULL),
+ g_uri_unescape_string(val, NULL));
+ ++str;
+ }
+
+ return hash_table;
+}