/* * String utilities * * Copyright (C) 2017 Patrick McDermott * * This file is part of Marquee. * * Marquee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Marquee is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Marquee. If not, see . */ #include "string.h" #include #include gint64 mq_atoi64(const gchar *a) { gint64 i64; if (sscanf(a, "%" SCNd64, &i64)) { return i64; } else { return 0; } } GHashTable * mq_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_strdelimit(val, "+", ' '); g_hash_table_insert(hash_table, g_uri_unescape_string(key, NULL), g_uri_unescape_string(val, NULL)); break; } *str = '\0'; g_strdelimit(val, "+", ' '); g_hash_table_insert(hash_table, g_uri_unescape_string(key, NULL), g_uri_unescape_string(val, NULL)); ++str; } return hash_table; }