]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
json: Support uint64 types serialization for older json-c versions
authorDaniel Wagner <dwagner@suse.de>
Tue, 16 Aug 2022 06:12:24 +0000 (08:12 +0200)
committerDaniel Wagner <dwagner@suse.de>
Tue, 16 Aug 2022 06:17:36 +0000 (08:17 +0200)
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 <dwagner@suse.de>
util/json.c
util/json.h

index fd52861166d47ffe1c2c4fd37f3c98466af94a93..8627bc8e75d5be82e3a2573fa3ffc35160b9bf8f 100644 (file)
@@ -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;
+
+}
index 2b8022a98ad308cd08dc220cd4d2b855e3bef89a..b5efe14c3a211ce3ba81d440e4c734b1941502e8 100644 (file)
        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