summaryrefslogtreecommitdiff
path: root/json-glib
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2020-04-06 23:27:40 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2020-04-06 23:27:40 +0000
commitbdeb15f51adff9c4936907465df9c510e8c84255 (patch)
tree388295033258ff2ff17f0d1f25286fe7ac6aa606 /json-glib
parentcf76724f3e495caa413694b3aa699458140b6b81 (diff)
parentc4bec6bee7b993930a5223549263668d8612d815 (diff)
downloadjson-glib-bdeb15f51adff9c4936907465df9c510e8c84255.tar.gz
Merge branch 'gvariant-errno2' into 'master'
json-gvariant: Fix poorly written patch in 212f925 See merge request GNOME/json-glib!23
Diffstat (limited to 'json-glib')
-rw-r--r--json-glib/json-gvariant.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/json-glib/json-gvariant.c b/json-glib/json-gvariant.c
index a86507a..72df81d 100644
--- a/json-glib/json-gvariant.c
+++ b/json-glib/json-gvariant.c
@@ -843,6 +843,7 @@ gvariant_simple_from_string (const gchar *st,
gboolean conversion_error = FALSE;
gint64 signed_value;
guint64 unsigned_value;
+ gdouble double_value;
errno = 0;
@@ -872,17 +873,17 @@ gvariant_simple_from_string (const gchar *st,
case G_VARIANT_CLASS_UINT16:
signed_value = g_ascii_strtoll (st, &nptr, 10);
conversion_error = errno != 0 || nptr == st;
- variant = g_variant_new_uint16 (g_ascii_strtoll (st, &nptr, 10));
+ variant = g_variant_new_uint16 (signed_value);
break;
case G_VARIANT_CLASS_INT32:
signed_value = g_ascii_strtoll (st, &nptr, 10);
conversion_error = errno != 0 || nptr == st;
- variant = g_variant_new_int32 (g_ascii_strtoll (st, &nptr, 10));
+ variant = g_variant_new_int32 (signed_value);
break;
case G_VARIANT_CLASS_UINT32:
- unsigned_value = g_ascii_strtoll (st, &nptr, 10);
+ unsigned_value = g_ascii_strtoull (st, &nptr, 10);
conversion_error = errno != 0 || nptr == st;
variant = g_variant_new_uint32 (unsigned_value);
break;
@@ -890,11 +891,11 @@ gvariant_simple_from_string (const gchar *st,
case G_VARIANT_CLASS_INT64:
signed_value = g_ascii_strtoll (st, &nptr, 10);
conversion_error = errno != 0 || nptr == st;
- variant = g_variant_new_int64 (g_ascii_strtoll (st, &nptr, 10));
+ variant = g_variant_new_int64 (signed_value);
break;
case G_VARIANT_CLASS_UINT64:
- unsigned_value = g_ascii_strtoll (st, &nptr, 10);
+ unsigned_value = g_ascii_strtoull (st, &nptr, 10);
conversion_error = errno != 0 || nptr == st;
variant = g_variant_new_uint64 (unsigned_value);
break;
@@ -906,7 +907,9 @@ gvariant_simple_from_string (const gchar *st,
break;
case G_VARIANT_CLASS_DOUBLE:
- variant = g_variant_new_double (g_ascii_strtod (st, &nptr));
+ double_value = g_ascii_strtod (st, &nptr);
+ conversion_error = errno != 0 || nptr == st;
+ variant = g_variant_new_double (double_value);
break;
case G_VARIANT_CLASS_STRING: