summaryrefslogtreecommitdiff
path: root/json-glib/json-object.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-10-16 16:37:01 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2007-10-16 16:37:01 +0100
commit93e26b94d9bb1909f3b16a4b0500f27660d7e621 (patch)
tree462f3649711235d37e6ff21cd97de6e9b1164647 /json-glib/json-object.c
parent73a7671dedfd3bb9bc1a8c197a68dcef90e627f7 (diff)
downloadjson-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.c31
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);
}