X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=json.c;h=cd3d5d74db12aab06409e523b95d9eed3c013682;hb=0551c57127daf6b3773fed9b471b70a0d983ca59;hp=75212c85526544c0f1a9a236086e0fd7900f83ce;hpb=3d2d14bcb844e72809192311369a642c5d415472;p=fio.git diff --git a/json.c b/json.c index 75212c85..cd3d5d74 100644 --- a/json.c +++ b/json.c @@ -194,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; @@ -230,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; @@ -296,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;