diff options
| author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-07-31 02:38:08 -0400 |
|---|---|---|
| committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-07-31 02:38:08 -0400 |
| commit | bcfac335a8e4086ff6afa5f267f9886a4d1b6370 (patch) | |
| tree | bf8cf2dcc05acea3253336ab607c5926611be2b2 /json-glib/json-gobject.c | |
| parent | 996d89911d71f54f9a476242f1bd43c077d4428c (diff) | |
| download | json-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.c | 22 |
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: |
