diff options
author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-16 16:37:01 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-16 16:37:01 +0100 |
commit | 93e26b94d9bb1909f3b16a4b0500f27660d7e621 (patch) | |
tree | 462f3649711235d37e6ff21cd97de6e9b1164647 /json-glib/json-object.c | |
parent | 73a7671dedfd3bb9bc1a8c197a68dcef90e627f7 (diff) | |
download | json-glib-93e26b94d9bb1909f3b16a4b0500f27660d7e621.tar.gz |
Normalize every member name before using it
Every member name is stored inside the internal hash table of JsonObject
using a normalized string: every delimiter found matching G_STR_DELIMITERS
is automatically transformed in an underscore ('_').
This means that "member-name" and "member_name" are completely equivalent
for a JsonObject.
Diffstat (limited to 'json-glib/json-object.c')
-rw-r--r-- | json-glib/json-object.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/json-glib/json-object.c b/json-glib/json-object.c index 736df6a..d197d38 100644 --- a/json-glib/json-object.c +++ b/json-glib/json-object.c @@ -145,6 +145,8 @@ json_object_add_member (JsonObject *object, const gchar *member_name, JsonNode *node) { + gchar *name; + g_return_if_fail (object != NULL); g_return_if_fail (member_name != NULL); g_return_if_fail (node != NULL); @@ -157,7 +159,8 @@ json_object_add_member (JsonObject *object, return; } - g_hash_table_replace (object->members, g_strdup (member_name), node); + name = g_strdelimit (g_strdup (member_name), G_STR_DELIMITERS, '_'); + g_hash_table_replace (object->members, name, node); } /* FIXME: yuck */ @@ -220,10 +223,17 @@ JsonNode * json_object_get_member (JsonObject *object, const gchar *member_name) { + gchar *name; + JsonNode *retval; + g_return_val_if_fail (object != NULL, NULL); g_return_val_if_fail (member_name != NULL, NULL); - return g_hash_table_lookup (object->members, member_name); + name = g_strdelimit (g_strdup (member_name), G_STR_DELIMITERS, '_'); + retval = g_hash_table_lookup (object->members, name); + g_free (name); + + return retval; } /** @@ -239,10 +249,17 @@ gboolean json_object_has_member (JsonObject *object, const gchar *member_name) { + gchar *name; + gboolean retval; + g_return_val_if_fail (object != NULL, FALSE); g_return_val_if_fail (member_name != NULL, FALSE); - - return (g_hash_table_lookup (object->members, member_name) != NULL); + + name = g_strdelimit (g_strdup (member_name), G_STR_DELIMITERS, '_'); + retval = (g_hash_table_lookup (object->members, member_name) != NULL); + g_free (name); + + return retval; } /** @@ -272,8 +289,12 @@ void json_object_remove_member (JsonObject *object, const gchar *member_name) { + gchar *name; + g_return_if_fail (object != NULL); g_return_if_fail (member_name != NULL); - g_hash_table_remove (object->members, member_name); + name = g_strdelimit (g_strdup (member_name), G_STR_DELIMITERS, '_'); + g_hash_table_remove (object->members, name); + g_free (name); } |