Beispiel #1
0
GHashTable*
balde_parse_query_string(const gchar *query_string)
{
    GHashTable *qs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
    if (query_string == NULL)
        goto point1;
    gchar **kv = g_strsplit(query_string, "&", 0);
    for (guint i = 0; kv[i] != NULL; i++) {
        gchar **pieces = g_strsplit(kv[i], "=", 2);
        if (g_strv_length(pieces) != 2)
            goto point2;
        gchar *key = balde_urldecode(pieces[0]);
        gchar *value = balde_urldecode(pieces[1]);
        if (key == NULL || value == NULL) {
            g_free(key);
            g_free(value);
            goto point2;
        }
        g_hash_table_replace(qs, key, value);
point2:
        g_strfreev(pieces);
    }
    g_strfreev(kv);
point1:
    return qs;
}
Beispiel #2
0
void
test_urldecode(void)
{
    gchar *rv = balde_urldecode("saf%3Dgfd+123");
    g_assert_cmpstr(rv, ==, "saf=gfd 123");
    g_free(rv);
}