summaryrefslogtreecommitdiff
path: root/json-glib/json-node.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2008-04-12 13:21:21 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2008-04-12 13:21:21 +0100
commit445a3f71d046abed4ff99e0ab4cd9cc8e047f5be (patch)
tree037fd38ec5de2a381c88181f8ab03ccd4fe9b4d0 /json-glib/json-node.c
parent4e826d9f209a8f68023bae54c91b2bbbb202a54a (diff)
downloadjson-glib-445a3f71d046abed4ff99e0ab4cd9cc8e047f5be.tar.gz
Allow null nodes to return a value without a warning
Value nodes might contain 'null' as a valid value, so the fast accessors should not barf out when encountering a JSON_NODE_NULL instead of the expected JSON_NODE_VALUE.
Diffstat (limited to 'json-glib/json-node.c')
-rw-r--r--json-glib/json-node.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/json-glib/json-node.c b/json-glib/json-node.c
index e147ad4..eacf357 100644
--- a/json-glib/json-node.c
+++ b/json-glib/json-node.c
@@ -492,7 +492,9 @@ G_CONST_RETURN gchar *
json_node_get_string (JsonNode *node)
{
g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, NULL);
+
+ if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
+ return NULL;
if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_STRING)
return g_value_get_string (&(node->data.value));
@@ -513,7 +515,9 @@ gchar *
json_node_dup_string (JsonNode *node)
{
g_return_val_if_fail (node != NULL, NULL);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, NULL);
+
+ if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
+ return NULL;
if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_STRING)
return g_value_dup_string (&(node->data.value));
@@ -563,7 +567,9 @@ gint
json_node_get_int (JsonNode *node)
{
g_return_val_if_fail (node != NULL, 0);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0);
+
+ if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
+ return 0;
if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_INT)
return g_value_get_int (&(node->data.value));
@@ -613,7 +619,9 @@ gdouble
json_node_get_double (JsonNode *node)
{
g_return_val_if_fail (node != NULL, 0.0);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0.0);
+
+ if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
+ return 0;
if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_DOUBLE)
return g_value_get_double (&(node->data.value));
@@ -663,11 +671,12 @@ gboolean
json_node_get_boolean (JsonNode *node)
{
g_return_val_if_fail (node != NULL, FALSE);
- g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, FALSE);
+
+ if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
+ return FALSE;
if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_BOOLEAN)
return g_value_get_boolean (&(node->data.value));
return FALSE;
}
-