|
@@ -372,28 +372,30 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
|
|
|
|
|
|
/* This is a nice tradeoff. */
|
|
|
output_pointer = ensure(output_buffer, 64, hooks);
|
|
|
- if (output_pointer != NULL)
|
|
|
+ if (output_pointer == NULL)
|
|
|
{
|
|
|
- /* This checks for NaN and Infinity */
|
|
|
- if ((d * 0) != 0)
|
|
|
- {
|
|
|
- length = sprintf((char*)output_pointer, "null");
|
|
|
- }
|
|
|
- else if ((fabs(floor(d) - d) <= DBL_EPSILON) && (fabs(d) < 1.0e60))
|
|
|
- {
|
|
|
- /* integer */
|
|
|
- length = sprintf((char*)output_pointer, "%.0f", d);
|
|
|
- trim_zeroes = false; /* don't remove zeroes for "big integers" */
|
|
|
- }
|
|
|
- else if ((fabs(d) < 1.0e-6) || (fabs(d) > 1.0e9))
|
|
|
- {
|
|
|
- length = sprintf((char*)output_pointer, "%e", d);
|
|
|
- trim_zeroes = false; /* don't remove zeroes in engineering notation */
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- length = sprintf((char*)output_pointer, "%f", d);
|
|
|
- }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* This checks for NaN and Infinity */
|
|
|
+ if ((d * 0) != 0)
|
|
|
+ {
|
|
|
+ length = sprintf((char*)output_pointer, "null");
|
|
|
+ }
|
|
|
+ else if ((fabs(floor(d) - d) <= DBL_EPSILON) && (fabs(d) < 1.0e60))
|
|
|
+ {
|
|
|
+ /* integer */
|
|
|
+ length = sprintf((char*)output_pointer, "%.0f", d);
|
|
|
+ trim_zeroes = false; /* don't remove zeroes for "big integers" */
|
|
|
+ }
|
|
|
+ else if ((fabs(d) < 1.0e-6) || (fabs(d) > 1.0e9))
|
|
|
+ {
|
|
|
+ length = sprintf((char*)output_pointer, "%e", d);
|
|
|
+ trim_zeroes = false; /* don't remove zeroes in engineering notation */
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ length = sprintf((char*)output_pointer, "%f", d);
|
|
|
}
|
|
|
|
|
|
/* sprintf failed */
|