From: Jan-Philipp Litza 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 +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.