X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=json.c;h=cd3d5d74db12aab06409e523b95d9eed3c013682;hp=e2819a65ba6a3236f7a3dba8a506eca07ddfb0fc;hb=fca6f06899d09b0fc35a58be9628bff7d6dde8e0;hpb=0284718c1b9dc1d5c1c42906f0990c01af20e401 diff --git a/json.c b/json.c index e2819a65..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,24 +236,30 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty return 0; } -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;