summaryrefslogtreecommitdiff
path: root/json-glib/json-gvariant.c
diff options
context:
space:
mode:
authorLaurent Bigonville <bigon@bigon.be>2011-07-06 12:34:56 +0200
committerEmmanuele Bassi <ebassi@linux.intel.com>2011-07-06 18:19:39 +0100
commit24fa4503ad5d85bf60027bd77c434b2a596b1c17 (patch)
tree07b2df34548ccb64c533195314ba6fc2fee56aa9 /json-glib/json-gvariant.c
parentdd3c30c5821f9f6bac4cc9016c49c7e6250377eb (diff)
downloadjson-glib-24fa4503ad5d85bf60027bd77c434b2a596b1c17.tar.gz
Fix GVariant creation on some architectures (bug #650483)
Fix casting issue in Gvariant creation on some architectures.
Diffstat (limited to 'json-glib/json-gvariant.c')
-rw-r--r--json-glib/json-gvariant.c46
1 files changed, 40 insertions, 6 deletions
diff --git a/json-glib/json-gvariant.c b/json-glib/json-gvariant.c
index c239457..cae43e0 100644
--- a/json-glib/json-gvariant.c
+++ b/json-glib/json-gvariant.c
@@ -1126,10 +1126,8 @@ json_to_gvariant_recurse (JsonNode *json_node,
{
GVariant *variant = NULL;
GVariantClass class;
- gchar class_type[2] = {0, 0};
class = json_to_gvariant_get_next_class (json_node, signature);
- class_type[0] = class;
if (class == JSON_G_VARIANT_CLASS_DICTIONARY)
{
@@ -1143,31 +1141,67 @@ json_to_gvariant_recurse (JsonNode *json_node,
{
case G_VARIANT_CLASS_BOOLEAN:
if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_BOOLEAN, error))
- variant = g_variant_new (class_type, json_node_get_boolean (json_node));
+ variant = g_variant_new_boolean (json_node_get_boolean (json_node));
break;
case G_VARIANT_CLASS_BYTE:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_byte (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_INT16:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_int16 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_UINT16:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_uint16 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_INT32:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_int32 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_UINT32:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_uint32 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_INT64:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_int64 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_UINT64:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
+ variant = g_variant_new_uint64 (json_node_get_int (json_node));
+ break;
+
case G_VARIANT_CLASS_HANDLE:
if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_INT64, error))
- variant = g_variant_new (class_type, json_node_get_int (json_node));
+ variant = g_variant_new_handle (json_node_get_int (json_node));
break;
case G_VARIANT_CLASS_DOUBLE:
if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_DOUBLE, error))
- variant = g_variant_new (class_type, json_node_get_double (json_node));
+ variant = g_variant_new_double (json_node_get_double (json_node));
break;
case G_VARIANT_CLASS_STRING:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_STRING, error))
+ variant = g_variant_new_string (json_node_get_string (json_node));
+ break;
+
case G_VARIANT_CLASS_OBJECT_PATH:
+ if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_STRING, error))
+ variant = g_variant_new_object_path (json_node_get_string (json_node));
+ break;
+
case G_VARIANT_CLASS_SIGNATURE:
if (json_node_assert_type (json_node, JSON_NODE_VALUE, G_TYPE_STRING, error))
- variant = g_variant_new (class_type, json_node_get_string (json_node));
+ variant = g_variant_new_signature (json_node_get_string (json_node));
break;
case G_VARIANT_CLASS_VARIANT: