summaryrefslogtreecommitdiff
path: root/json-glib/json-gobject.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2011-07-31 02:38:08 -0400
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2011-07-31 02:38:08 -0400
commitbcfac335a8e4086ff6afa5f267f9886a4d1b6370 (patch)
treebf8cf2dcc05acea3253336ab607c5926611be2b2 /json-glib/json-gobject.c
parent996d89911d71f54f9a476242f1bd43c077d4428c (diff)
downloadjson-glib-bcfac335a8e4086ff6afa5f267f9886a4d1b6370.tar.gz
Handle integer to float/double conversions in json_deserialize_pspec()
It happens that while serializing that float/double properties are set to round numbers, this results in deserialization as gint64 values and a parse failure. This patch addresses it by accepting round gint64 numbers as valid values for float/double properties.
Diffstat (limited to 'json-glib/json-gobject.c')
-rw-r--r--json-glib/json-gobject.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/json-glib/json-gobject.c b/json-glib/json-gobject.c
index 68d0d95..bb63467 100644
--- a/json-glib/json-gobject.c
+++ b/json-glib/json-gobject.c
@@ -516,7 +516,6 @@ json_deserialize_pspec (GValue *value,
{
case G_TYPE_BOOLEAN:
case G_TYPE_INT64:
- case G_TYPE_DOUBLE:
case G_TYPE_STRING:
if (G_VALUE_HOLDS (&node_value, G_VALUE_TYPE (value)))
{
@@ -557,12 +556,33 @@ json_deserialize_pspec (GValue *value,
}
break;
+ case G_TYPE_DOUBLE:
+
+ if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE))
+ {
+ g_value_set_double (value, g_value_get_double (&node_value));
+ retval = TRUE;
+ }
+ else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_double (value, (gdouble) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
+
+ break;
+
case G_TYPE_FLOAT:
if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE))
{
g_value_set_float (value, (gfloat) g_value_get_double (&node_value));
retval = TRUE;
}
+ else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
+ {
+ g_value_set_float (value, (gfloat) g_value_get_int64 (&node_value));
+ retval = TRUE;
+ }
+
break;
case G_TYPE_ENUM: