From e852f5b8c194e6389f6f1e9ab80e36a548cb0a94 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Tue, 16 Aug 2022 08:12:24 +0200 Subject: [PATCH] json: Support uint64 types serialization for older json-c versions Notable json-c 0.13 is lacking support for serializing uint64_t types. At this point of writing the 0.13 version is widely deployed. Let's add our own version of the serialization function as fallback. Signed-off-by: Daniel Wagner --- util/json.c | 15 +++++++++++++++ util/json.h | 7 ++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/util/json.c b/util/json.c index fd528611..8627bc8e 100644 --- a/util/json.c +++ b/util/json.c @@ -17,3 +17,18 @@ struct json_object *util_json_object_new_double(long double d) return obj; } + +struct json_object *util_json_object_new_uint64(uint64_t i) +{ + struct json_object *obj; + char *str; + + if (asprintf(&str, "%" PRIu64, i) < 0) + return NULL; + + obj = json_object_new_string(str); + + free(str); + return obj; + +} diff --git a/util/json.h b/util/json.h index 2b8022a9..b5efe14c 100644 --- a/util/json.h +++ b/util/json.h @@ -19,11 +19,7 @@ json_object_object_add(o, k, json_object_new_uint64(v)) #else #define json_object_add_value_uint64(o, k, v) \ - if ((v) > UINT_MAX) { \ - fprintf(stderr, "Value overflow in %s", k); \ - json_object_object_add(o, k, json_object_new_int(-1)); \ - } else \ - json_object_object_add(o, k, json_object_new_int(v)) + json_object_object_add(o, k, util_json_object_new_uint64(v)) #endif #define json_object_add_value_double(o, k, v) \ json_object_object_add(o, k, util_json_object_new_double(v)) @@ -45,5 +41,6 @@ JSON_C_TO_STRING_NOSLASHESCAPE)) struct json_object *util_json_object_new_double(long double d); +struct json_object *util_json_object_new_uint64(uint64_t i); #endif -- 2.50.1