diff options
author | Emmanuele Bassi <ebassi@openedhand.com> | 2008-04-19 23:08:20 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@openedhand.com> | 2008-04-19 23:08:20 +0100 |
commit | bf2249a1855b6bebe0b3528b4d5321a1ebe4b9e7 (patch) | |
tree | 58d8f5a09d0378e527af4da33058b4e71c736099 /json-glib/json-node.c | |
parent | c191b2f8a8159457db3333390be10d6c7c0d4336 (diff) | |
download | json-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.
Diffstat (limited to 'json-glib/json-node.c')
-rw-r--r-- | json-glib/json-node.c | 17 |
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 (); } |