109 lines
3.9 KiB
Diff
109 lines
3.9 KiB
Diff
|
From: Jan-Philipp Litza <janphilipp@litza.de>
|
||
|
Date: Fri, 6 May 2016 16:44:29 +0200
|
||
|
Subject: libjson-c: Add support for custom format strings for doubles
|
||
|
|
||
|
diff --git a/package/libs/libjson-c/patches/002-custom-format-string.patch b/package/libs/libjson-c/patches/002-custom-format-string.patch
|
||
|
new file mode 100644
|
||
|
index 0000000..2f454c5
|
||
|
--- /dev/null
|
||
|
+++ b/package/libs/libjson-c/patches/002-custom-format-string.patch
|
||
|
@@ -0,0 +1,98 @@
|
||
|
+From 21dc5dc92bd56f5f4dc2c90b9ea6bf1e1407714e Mon Sep 17 00:00:00 2001
|
||
|
+From: Jan-Philipp Litza <janphilipp@litza.de>
|
||
|
+Date: Fri, 6 May 2016 16:12:44 +0200
|
||
|
+Subject: [PATCH] Export json_object_double_to_json_string() and use custom
|
||
|
+ format string
|
||
|
+BCC: janphilipp@litza.de
|
||
|
+
|
||
|
+---
|
||
|
+ json_object.c | 12 ++++++------
|
||
|
+ json_object.h | 28 ++++++++++++++++++++++++++++
|
||
|
+ 2 files changed, 34 insertions(+), 6 deletions(-)
|
||
|
+
|
||
|
+diff --git a/json_object.c b/json_object.c
|
||
|
+index 7d60884..46701e7 100644
|
||
|
+--- a/json_object.c
|
||
|
++++ b/json_object.c
|
||
|
+@@ -55,7 +55,6 @@ static struct json_object* json_object_new(enum json_type o_type);
|
||
|
+ static json_object_to_json_string_fn json_object_object_to_json_string;
|
||
|
+ static json_object_to_json_string_fn json_object_boolean_to_json_string;
|
||
|
+ static json_object_to_json_string_fn json_object_int_to_json_string;
|
||
|
+-static json_object_to_json_string_fn json_object_double_to_json_string;
|
||
|
+ static json_object_to_json_string_fn json_object_string_to_json_string;
|
||
|
+ static json_object_to_json_string_fn json_object_array_to_json_string;
|
||
|
+
|
||
|
+@@ -644,10 +643,10 @@ int64_t json_object_get_int64(const struct json_object *jso)
|
||
|
+
|
||
|
+ /* json_object_double */
|
||
|
+
|
||
|
+-static int json_object_double_to_json_string(struct json_object* jso,
|
||
|
+- struct printbuf *pb,
|
||
|
+- int level,
|
||
|
+- int flags)
|
||
|
++int json_object_double_to_json_string(struct json_object* jso,
|
||
|
++ struct printbuf *pb,
|
||
|
++ int level,
|
||
|
++ int flags)
|
||
|
+ {
|
||
|
+ char buf[128], *p, *q;
|
||
|
+ int size;
|
||
|
+@@ -663,7 +662,8 @@ static int json_object_double_to_json_string(struct json_object* jso,
|
||
|
+ else
|
||
|
+ size = snprintf(buf, sizeof(buf), "-Infinity");
|
||
|
+ else
|
||
|
+- size = snprintf(buf, sizeof(buf), "%.17g", jso->o.c_double);
|
||
|
++ size = snprintf(buf, sizeof(buf),
|
||
|
++ jso->_userdata ? (const char*) jso->_userdata : "%.17g", jso->o.c_double);
|
||
|
+
|
||
|
+ p = strchr(buf, ',');
|
||
|
+ if (p) {
|
||
|
+diff --git a/json_object.h b/json_object.h
|
||
|
+index 2bce454..a89de44 100644
|
||
|
+--- a/json_object.h
|
||
|
++++ b/json_object.h
|
||
|
+@@ -614,6 +614,9 @@ extern int64_t json_object_get_int64(const struct json_object *obj);
|
||
|
+ /* double type methods */
|
||
|
+
|
||
|
+ /** Create a new empty json_object of type json_type_double
|
||
|
++ *
|
||
|
++ * @see json_object_double_to_json_string() for how to set a custom format string.
|
||
|
++ *
|
||
|
+ * @param d the double
|
||
|
+ * @returns a json_object of type json_type_double
|
||
|
+ */
|
||
|
+@@ -642,6 +645,31 @@ extern struct json_object* json_object_new_double(double d);
|
||
|
+ */
|
||
|
+ extern struct json_object* json_object_new_double_s(double d, const char *ds);
|
||
|
+
|
||
|
++
|
||
|
++/** Serialize a json_object of type json_type_double to a string.
|
||
|
++ *
|
||
|
++ * This function isn't meant to be called directly. Instead, you can set a
|
||
|
++ * custom format string for the serialization of this double using the
|
||
|
++ * following call (where "%.17g" actually is the default):
|
||
|
++ *
|
||
|
++ * @code
|
||
|
++ * jso = json_object_new_double(d);
|
||
|
++ * json_object_set_serializer(jso, json_object_double_to_json_string,
|
||
|
++ * "%.17g", NULL);
|
||
|
++ * @endcode
|
||
|
++ *
|
||
|
++ * @see printf(3) man page for format strings
|
||
|
++ *
|
||
|
++ * @param jso The json_type_double object that is serialized.
|
||
|
++ * @param pb The destination buffer.
|
||
|
++ * @param level Ignored.
|
||
|
++ * @param flags Ignored.
|
||
|
++ */
|
||
|
++extern int json_object_double_to_json_string(struct json_object* jso,
|
||
|
++ struct printbuf *pb,
|
||
|
++ int level,
|
||
|
++ int flags);
|
||
|
++
|
||
|
+ /** Get the double floating point value of a json_object
|
||
|
+ *
|
||
|
+ * The type is coerced to a double if the passed object is not a double.
|
||
|
+--
|
||
|
+2.7.4
|
||
|
+
|