summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2008-04-19 23:08:20 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2008-04-19 23:08:20 +0100
commitbf2249a1855b6bebe0b3528b4d5321a1ebe4b9e7 (patch)
tree58d8f5a09d0378e527af4da33058b4e71c736099
parentc191b2f8a8159457db3333390be10d6c7c0d4336 (diff)
downloadjson-glib-bf2249a1855b6bebe0b3528b4d5321a1ebe4b9e7.tar.gz
Do not copy node data if it's not there
If the source JsonNode does not contain data yet, do not try and copy it.
-rw-r--r--json-glib/json-node.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/json-glib/json-node.c b/json-glib/json-node.c
index eacf357..035dd2e 100644
--- a/json-glib/json-node.c
+++ b/json-glib/json-node.c
@@ -136,17 +136,26 @@ json_node_copy (JsonNode *node)
switch (copy->type)
{
case JSON_NODE_OBJECT:
- copy->data.object = json_object_ref (node->data.object);
+ if (node->data.object)
+ copy->data.object = json_object_ref (node->data.object);
break;
+
case JSON_NODE_ARRAY:
- copy->data.array = json_array_ref (node->data.array);
+ if (node->data.array)
+ copy->data.array = json_array_ref (node->data.array);
break;
+
case JSON_NODE_VALUE:
- g_value_init (&(copy->data.value), G_VALUE_TYPE (&(node->data.value)));
- g_value_copy (&(node->data.value), &(copy->data.value));
+ if (G_VALUE_TYPE (&(node->data.value)) != G_TYPE_INVALID)
+ {
+ g_value_init (&(copy->data.value), G_VALUE_TYPE (&(node->data.value)));
+ g_value_copy (&(node->data.value), &(copy->data.value));
+ }
break;
+
case JSON_NODE_NULL:
break;
+
default:
g_assert_not_reached ();
}