]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme-cli: Add support of unsigned long long to json routines
authorOleksii Timofieiev <tim.oleksii@gmail.com>
Sat, 20 Jan 2018 10:34:44 +0000 (13:34 +0300)
committerOleksii Timofieiev <tim.oleksii@gmail.com>
Sat, 20 Jan 2018 10:34:44 +0000 (13:34 +0300)
Signed-off-by: Oleksii Timofieiev <tim.oleksii@gmail.com>
json.c
json.h

diff --git a/json.c b/json.c
index e127aa2550344de59512ad1e172427724aeb86a8..d2f9fb73f95afd3d200a860266ffd91c1051acd4 100644 (file)
--- a/json.c
+++ b/json.c
@@ -55,6 +55,19 @@ static struct json_value *json_create_value_int(long long number)
        return value;
 }
 
+static struct json_value *json_create_value_uint(unsigned long long number)
+{
+       struct json_value *value = malloc(sizeof(struct json_value));
+
+       if (value) {
+               value->type = JSON_TYPE_UINT;
+               value->uint_number = number;
+       } else
+               fail_and_notify();
+
+       return value;
+}
+
 static struct json_value *json_create_value_float(long double number)
 {
        struct json_value *value = malloc(sizeof(struct json_value));
@@ -234,6 +247,8 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
                value = json_create_value_string(va_arg(args, char *));
        else if (type == JSON_TYPE_INTEGER)
                value = json_create_value_int(va_arg(args, long long));
+       else if (type == JSON_TYPE_UINT)
+               value = json_create_value_uint(va_arg(args, unsigned long long));
        else if (type == JSON_TYPE_FLOAT)
                value = json_create_value_float(va_arg(args, long double));
        else if (type == JSON_TYPE_OBJECT)
@@ -270,6 +285,8 @@ int json_array_add_value_type(struct json_array *array, int type, ...)
                value = json_create_value_string(va_arg(args, char *));
        else if (type == JSON_TYPE_INTEGER)
                value = json_create_value_int(va_arg(args, long long));
+       else if (type == JSON_TYPE_UINT)
+               value = json_create_value_uint(va_arg(args, unsigned long long));
        else if (type == JSON_TYPE_FLOAT)
                value = json_create_value_float(va_arg(args, double));
        else if (type == JSON_TYPE_OBJECT)
@@ -373,6 +390,9 @@ static void json_print_value(struct json_value *value, void *out)
        case JSON_TYPE_INTEGER:
                printf( "%lld", value->integer_number);
                break;
+       case JSON_TYPE_UINT:
+               printf( "%llu", value->uint_number);
+               break;
        case JSON_TYPE_FLOAT:
                printf( "%.0Lf", value->float_number);
                break;
diff --git a/json.h b/json.h
index f56723dfd00b28dc57b4ae6dd67a95c36aa8aea7..c4ea53160c3bd3163c5a1bd40573a30f9ec44002 100644 (file)
--- a/json.h
+++ b/json.h
@@ -10,12 +10,14 @@ struct json_pair;
 #define JSON_TYPE_FLOAT 2
 #define JSON_TYPE_OBJECT 3
 #define JSON_TYPE_ARRAY 4
+#define JSON_TYPE_UINT 5
 #define JSON_PARENT_TYPE_PAIR 0
 #define JSON_PARENT_TYPE_ARRAY 1
 struct json_value {
        int type;
        union {
                long long integer_number;
+               unsigned long long uint_number;
                long double float_number;
                char *string;
                struct json_object *object;
@@ -54,6 +56,8 @@ void json_free_object(struct json_object *obj);
 int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
 #define json_object_add_value_int(obj, name, val) \
        json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val))
+#define json_object_add_value_uint(obj, name, val) \
+       json_object_add_value_type((obj), name, JSON_TYPE_UINT, (unsigned long long) (val))
 #define json_object_add_value_float(obj, name, val) \
        json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val))
 #define json_object_add_value_string(obj, name, val) \
@@ -65,6 +69,8 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
 int json_array_add_value_type(struct json_array *array, int type, ...);
 #define json_array_add_value_int(obj, val) \
        json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
+#define json_array_add_value_uint(obj, val) \
+       json_array_add_value_type((obj), JSON_TYPE_UINT, (val))
 #define json_array_add_value_float(obj, val) \
        json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val))
 #define json_array_add_value_string(obj, val) \