@@ -67,6 +67,7 @@ std::string valueToString(double value) {
67
67
// Allocate a buffer that is more than large enough to store the 16 digits of
68
68
// precision requested below.
69
69
char buffer[32 ];
70
+ int len = -1 ;
70
71
71
72
// Print into the buffer. We need not request the alternative representation
72
73
// that always has a decimal point because JSON doesn't distingish the
@@ -75,36 +76,35 @@ std::string valueToString(double value) {
75
76
// visual studio 2005 to
76
77
// avoid warning.
77
78
#if defined(WINCE)
78
- _snprintf (buffer, sizeof (buffer), " %.16g" , value);
79
+ len = _snprintf (buffer, sizeof (buffer), " %.16g" , value);
79
80
#else
80
- sprintf_s (buffer, sizeof (buffer), " %.16g" , value);
81
+ len = sprintf_s (buffer, sizeof (buffer), " %.16g" , value);
81
82
#endif
82
83
#else
83
84
if ( isfinite ( value ))
84
85
{
85
- snprintf (buffer, sizeof (buffer), " %.16g" , value);
86
+ len = snprintf (buffer, sizeof (buffer), " %.16g" , value);
86
87
}
87
88
else
88
89
{
89
90
// IEEE standard states that NaN values will not compare to themselves
90
91
if ( value != value)
91
92
{
92
- snprintf (buffer, sizeof (buffer), " null" );
93
+ len = snprintf (buffer, sizeof (buffer), " null" );
93
94
}
94
95
else if ( value < 0 )
95
96
{
96
- snprintf (buffer, sizeof (buffer), " -1e+9999" );
97
+ len = snprintf (buffer, sizeof (buffer), " -1e+9999" );
97
98
}
98
99
else
99
100
{
100
- snprintf (buffer, sizeof (buffer), " 1e+9999" );
101
+ len = snprintf (buffer, sizeof (buffer), " 1e+9999" );
101
102
}
102
- // nothing more to do, return.
103
- return buffer;
103
+ // For those, we do not need to call fixNumLoc, but it is fast.
104
104
}
105
-
106
105
#endif
107
- fixNumericLocale (buffer, buffer + strlen (buffer));
106
+ assert (len>=0 );
107
+ fixNumericLocale (buffer, buffer + len);
108
108
return buffer;
109
109
}
110
110
0 commit comments