X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=json.c;h=cd3d5d74db12aab06409e523b95d9eed3c013682;hp=f3ec0bb45f0852dde21d9cdbf0de97e46725a371;hb=9ce6f6f2bd636e9678982b86d6992ed419634c31;hpb=a666cab8ed3d2a2fa782be345425a2e88734a007 diff --git a/json.c b/json.c index f3ec0bb4..cd3d5d74 100644 --- a/json.c +++ b/json.c @@ -1,6 +1,5 @@ #include #include -#include #include #include #include "json.h" @@ -40,7 +39,7 @@ static struct json_value *json_create_value_int(long long number) return value; } -static struct json_value *json_create_value_float(float number) +static struct json_value *json_create_value_float(double number) { struct json_value *value = malloc(sizeof(struct json_value)); @@ -195,25 +194,31 @@ static int json_object_add_pair(struct json_object *obj, struct json_pair *pair) return 0; } -int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...) +int json_object_add_value_type(struct json_object *obj, const char *name, + const struct json_value *arg) { struct json_value *value; struct json_pair *pair; - va_list args; int ret; - va_start(args, type); - if (type == JSON_TYPE_STRING) - 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_FLOAT) - value = json_create_value_float(va_arg(args, double)); - else if (type == JSON_TYPE_OBJECT) - value = json_create_value_object(va_arg(args, struct json_object *)); - else - value = json_create_value_array(va_arg(args, struct json_array *)); - va_end(args); + switch (arg->type) { + case JSON_TYPE_STRING: + value = json_create_value_string(arg->string); + break; + case JSON_TYPE_INTEGER: + value = json_create_value_int(arg->integer_number); + break; + case JSON_TYPE_FLOAT: + value = json_create_value_float(arg->float_number); + break; + case JSON_TYPE_OBJECT: + value = json_create_value_object(arg->object); + break; + default: + case JSON_TYPE_ARRAY: + value = json_create_value_array(arg->array); + break; + } if (!value) return ENOMEM; @@ -231,25 +236,30 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty return 0; } -static void json_print_array(struct json_array *array, struct buf_output *); -int json_array_add_value_type(struct json_array *array, int type, ...) +int json_array_add_value_type(struct json_array *array, + const struct json_value *arg) { struct json_value *value; - va_list args; int ret; - va_start(args, type); - if (type == JSON_TYPE_STRING) - 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_FLOAT) - value = json_create_value_float(va_arg(args, double)); - else if (type == JSON_TYPE_OBJECT) - value = json_create_value_object(va_arg(args, struct json_object *)); - else - value = json_create_value_array(va_arg(args, struct json_array *)); - va_end(args); + switch (arg->type) { + case JSON_TYPE_STRING: + value = json_create_value_string(arg->string); + break; + case JSON_TYPE_INTEGER: + value = json_create_value_int(arg->integer_number); + break; + case JSON_TYPE_FLOAT: + value = json_create_value_float(arg->float_number); + break; + case JSON_TYPE_OBJECT: + value = json_create_value_object(arg->object); + break; + default: + case JSON_TYPE_ARRAY: + value = json_create_value_array(arg->array); + break; + } if (!value) return ENOMEM; @@ -297,8 +307,8 @@ static void json_print_level(int level, struct buf_output *out) } static void json_print_pair(struct json_pair *pair, struct buf_output *); -static void json_print_array(struct json_array *array, struct buf_output *); static void json_print_value(struct json_value *value, struct buf_output *); + void json_print_object(struct json_object *obj, struct buf_output *out) { int i; @@ -347,7 +357,7 @@ static void json_print_value(struct json_value *value, struct buf_output *out) log_buf(out, "%lld", value->integer_number); break; case JSON_TYPE_FLOAT: - log_buf(out, "%.2f", value->float_number); + log_buf(out, "%f", value->float_number); break; case JSON_TYPE_OBJECT: json_print_object(value->object, out);