X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=json.c;h=7480a61fa98939519f3306fa583977fd8d331f40;hb=ab50817f68faf742e7725922b9225fc067275750;hp=ea61af72c422ad575238eaef2f4b4b2153a471d2;hpb=d366a95e3c140e628efbac6448605455d8bd2dfc;p=fio.git diff --git a/json.c b/json.c index ea61af72..7480a61f 100644 --- a/json.c +++ b/json.c @@ -35,7 +35,7 @@ static struct json_pair *json_create_pair(const char *name, struct json_value *v return pair; } -static struct json_value *json_create_value_int(long number) +static struct json_value *json_create_value_int(long long number) { struct json_value *value = malloc(sizeof(struct json_value)); @@ -63,24 +63,28 @@ static char *strdup_escape(const char *str) char *p, *ret; int escapes; + if (!strlen(str)) + return NULL; + escapes = 0; while ((input = strpbrk(input, "\\\"")) != NULL) { escapes++; input++; } - p = ret = malloc(strlen(str) + escapes); + p = ret = malloc(strlen(str) + escapes + 1); while (*str) { if (*str == '\\' || *str == '\"') *p++ = '\\'; *p++ = *str++; } + *p = '\0'; return ret; } /* - * Valid JSON strings must escape '"' and '/' with a preceeding '/' + * Valid JSON strings must escape '"' and '/' with a preceding '/' */ static struct json_value *json_create_value_string(const char *str) { @@ -208,7 +212,7 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty 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)); + 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) @@ -244,7 +248,7 @@ int json_array_add_value_type(struct json_array *array, int 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)); + 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) @@ -346,7 +350,7 @@ static void json_print_value(struct json_value *value) log_info("\"%s\"", value->string); break; case JSON_TYPE_INTEGER: - log_info("%ld", value->integer_number); + log_info("%lld", value->integer_number); break; case JSON_TYPE_FLOAT: log_info("%.2f", value->float_number);