Skip to content
Snippets Groups Projects
0003-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch 3.69 KiB
Newer Older
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 0000000000000000000000000000000000000000..b67433a7baf37654a17fa5036c4266b33bdda9f2
--- /dev/null
+++ b/package/libs/libjson-c/patches/002-custom-format-string.patch
@@ -0,0 +1,91 @@
+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(-)
+
+--- a/json_object.c
++++ b/json_object.c
+@@ -55,7 +55,6 @@ static struct json_object* json_object_n
+ 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;
+ 
+@@ -560,10 +559,10 @@ int64_t json_object_get_int64(struct 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;
+@@ -579,7 +578,8 @@ static int json_object_double_to_json_st
+     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) {
+--- a/json_object.h
++++ b/json_object.h
+@@ -515,6 +515,9 @@ extern int64_t json_object_get_int64(str
+ /* 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
+  */
+@@ -543,6 +546,31 @@ extern struct json_object* json_object_n
+  */
+ 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.