summaryrefslogtreecommitdiff
path: root/json-glib/json-gobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-gobject.c')
-rw-r--r--json-glib/json-gobject.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/json-glib/json-gobject.c b/json-glib/json-gobject.c
index ccb3007..73ecaac 100644
--- a/json-glib/json-gobject.c
+++ b/json-glib/json-gobject.c
@@ -519,33 +519,51 @@ json_deserialize_pspec (GValue *value,
case G_TYPE_INT64:
case G_TYPE_DOUBLE:
case G_TYPE_STRING:
- g_value_copy (&node_value, value);
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_VALUE_TYPE (value)))
+ {
+ g_value_copy (&node_value, value);
+ retval = TRUE;
+ }
break;
case G_TYPE_INT:
- g_value_set_int (value, (gint) g_value_get_int64 (&node_value));
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_int (value, (gint) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
break;
case G_TYPE_CHAR:
- g_value_set_char (value, (gchar) g_value_get_int64 (&node_value));
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_char (value, (gchar) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
break;
case G_TYPE_UINT:
- g_value_set_uint (value, (guint) g_value_get_int64 (&node_value));
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_uint (value, (guint) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
break;
case G_TYPE_UCHAR:
- g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value));
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
break;
case G_TYPE_FLOAT:
- g_value_set_float (value, (gfloat) g_value_get_double (&node_value));
- retval = TRUE;
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE))
+ {
+ g_value_set_float (value, (gfloat) g_value_get_double (&node_value));
+ retval = TRUE;
+ }
break;
case G_TYPE_ENUM: