[json-glib] Handle integer to float/double conversions in json_deserialize_pspec()



commit bcfac335a8e4086ff6afa5f267f9886a4d1b6370
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sun Jul 31 02:38:08 2011 -0400

    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.

 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:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]