summaryrefslogtreecommitdiff
path: root/json-glib/json-object.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2010-06-16 11:54:55 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2010-09-25 20:19:31 +0100
commita2c7523ee67c0d6270bcf7eaaac528edff93e7ce (patch)
tree697fc0c27bcb6454e82a10bc1dc0a24a46e8792d /json-glib/json-object.c
parent3046a0222e73a3da2d87eb088302de45e2846aa0 (diff)
downloadjson-glib-0-10.tar.gz
Allow NULL as a value for strings, arrays and objectsjson-glib-0-10
We should not warn when asking for a string, array or object if the contents were 'null'. (cherry picked from commit 3f8c8f99126dc1a70d847eded13afd4b64395250) Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Diffstat (limited to 'json-glib/json-object.c')
-rw-r--r--json-glib/json-object.c45
1 files changed, 36 insertions, 9 deletions
diff --git a/json-glib/json-object.c b/json-glib/json-object.c
index 1490d7b..6948f67 100644
--- a/json-glib/json-object.c
+++ b/json-glib/json-object.c
@@ -313,8 +313,14 @@ json_object_set_string_member (JsonObject *object,
g_return_if_fail (object != NULL);
g_return_if_fail (member_name != NULL);
- node = json_node_new (JSON_NODE_VALUE);
- json_node_set_string (node, value);
+ if (value != NULL)
+ {
+ node = json_node_new (JSON_NODE_VALUE);
+ json_node_set_string (node, value);
+ }
+ else
+ node = json_node_new (JSON_NODE_NULL);
+
object_set_member_internal (object, member_name, node);
}
@@ -368,8 +374,14 @@ json_object_set_array_member (JsonObject *object,
g_return_if_fail (object != NULL);
g_return_if_fail (member_name != NULL);
- node = json_node_new (JSON_NODE_ARRAY);
- json_node_take_array (node, value);
+ if (value != NULL)
+ {
+ node = json_node_new (JSON_NODE_ARRAY);
+ json_node_take_array (node, value);
+ }
+ else
+ node = json_node_new (JSON_NODE_NULL);
+
object_set_member_internal (object, member_name, node);
}
@@ -398,8 +410,14 @@ json_object_set_object_member (JsonObject *object,
g_return_if_fail (object != NULL);
g_return_if_fail (member_name != NULL);
- node = json_node_new (JSON_NODE_OBJECT);
- json_node_take_object (node, value);
+ if (value != NULL)
+ {
+ node = json_node_new (JSON_NODE_OBJECT);
+ json_node_take_object (node, value);
+ }
+ else
+ node = json_node_new (JSON_NODE_NULL);
+
object_set_member_internal (object, member_name, node);
}
@@ -654,7 +672,10 @@ json_object_get_string_member (JsonObject *object,
node = object_get_member_internal (object, member_name);
g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, NULL);
+ g_return_val_if_fail (JSON_NODE_HOLDS_VALUE (node) || JSON_NODE_HOLDS_NULL (node), NULL);
+
+ if (JSON_NODE_HOLDS_NULL (node))
+ return NULL;
return json_node_get_string (node);
}
@@ -684,7 +705,10 @@ json_object_get_array_member (JsonObject *object,
node = object_get_member_internal (object, member_name);
g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY, NULL);
+ g_return_val_if_fail (JSON_NODE_HOLDS_ARRAY (node) || JSON_NODE_HOLDS_NULL (node), NULL);
+
+ if (JSON_NODE_HOLDS_NULL (node))
+ return NULL;
return json_node_get_array (node);
}
@@ -714,7 +738,10 @@ json_object_get_object_member (JsonObject *object,
node = object_get_member_internal (object, member_name);
g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT, NULL);
+ g_return_val_if_fail (JSON_NODE_HOLDS_OBJECT (node) || JSON_NODE_HOLDS_NULL (node), NULL);
+
+ if (JSON_NODE_HOLDS_NULL (node))
+ return NULL;
return json_node_get_object (node);
}