|
|
@@ -742,20 +742,24 @@ static int json_object_double_to_json_string_format(struct json_object* jso, |
|
|
|
int flags, |
|
|
|
const char *format) |
|
|
|
{ |
|
|
|
char buf[128], *p, *q; |
|
|
|
int size; |
|
|
|
double dummy; /* needed for modf() */ |
|
|
|
/* Although JSON RFC does not support |
|
|
|
NaN or Infinity as numeric values |
|
|
|
ECMA 262 section 9.8.1 defines |
|
|
|
how to handle these cases as strings */ |
|
|
|
if(isnan(jso->o.c_double)) |
|
|
|
size = snprintf(buf, sizeof(buf), "NaN"); |
|
|
|
else if(isinf(jso->o.c_double)) |
|
|
|
if(jso->o.c_double > 0) |
|
|
|
size = snprintf(buf, sizeof(buf), "Infinity"); |
|
|
|
else |
|
|
|
size = snprintf(buf, sizeof(buf), "-Infinity"); |
|
|
|
char buf[128], *p, *q; |
|
|
|
int size; |
|
|
|
double dummy; /* needed for modf() */ |
|
|
|
/* Although JSON RFC does not support |
|
|
|
NaN or Infinity as numeric values |
|
|
|
ECMA 262 section 9.8.1 defines |
|
|
|
how to handle these cases as strings */ |
|
|
|
if (isnan(jso->o.c_double)) |
|
|
|
{ |
|
|
|
size = snprintf(buf, sizeof(buf), "NaN"); |
|
|
|
} |
|
|
|
else if (isinf(jso->o.c_double)) |
|
|
|
{ |
|
|
|
if(jso->o.c_double > 0) |
|
|
|
size = snprintf(buf, sizeof(buf), "Infinity"); |
|
|
|
else |
|
|
|
size = snprintf(buf, sizeof(buf), "-Infinity"); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
const char *std_format = "%.17g"; |
|
|
@@ -782,22 +786,22 @@ static int json_object_double_to_json_string_format(struct json_object* jso, |
|
|
|
if (size < 0) |
|
|
|
return -1; |
|
|
|
|
|
|
|
p = strchr(buf, ','); |
|
|
|
if (p) { |
|
|
|
*p = '.'; |
|
|
|
} else { |
|
|
|
p = strchr(buf, '.'); |
|
|
|
} |
|
|
|
if (p && (flags & JSON_C_TO_STRING_NOZERO)) { |
|
|
|
/* last useful digit, always keep 1 zero */ |
|
|
|
p++; |
|
|
|
for (q=p ; *q ; q++) { |
|
|
|
if (*q!='0') p=q; |
|
|
|
} |
|
|
|
/* drop trailing zeroes */ |
|
|
|
*(++p) = 0; |
|
|
|
size = p-buf; |
|
|
|
} |
|
|
|
p = strchr(buf, ','); |
|
|
|
if (p) |
|
|
|
*p = '.'; |
|
|
|
else |
|
|
|
p = strchr(buf, '.'); |
|
|
|
if (p && (flags & JSON_C_TO_STRING_NOZERO)) |
|
|
|
{ |
|
|
|
/* last useful digit, always keep 1 zero */ |
|
|
|
p++; |
|
|
|
for (q=p ; *q ; q++) { |
|
|
|
if (*q!='0') p=q; |
|
|
|
} |
|
|
|
/* drop trailing zeroes */ |
|
|
|
*(++p) = 0; |
|
|
|
size = p-buf; |
|
|
|
} |
|
|
|
|
|
|
|
if (size >= (int)sizeof(buf)) |
|
|
|
// The standard formats are guaranteed not to overrun the buffer, |
|
|
|