diff options
author | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2017-06-15 22:58:46 -0700 |
---|---|---|
committer | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2017-06-15 22:58:46 -0700 |
commit | 207bc788e93a40460c36bfbb9f2af9927b87de9b (patch) | |
tree | 7f21822887b9e0625ac5bf039971f84dc7d5c5d8 /src | |
parent | cd2804d3ee14487fc1af0ecaa05ffbe7baba5635 (diff) |
Use buffer with a static size in convert_number_to_mantissa_exponent
We use references to arrays elsewhere in the codebase and there's just
one caller for this function so it's easier to fix the size.
This will simplify snprintf refactoring.
Diffstat (limited to 'src')
-rw-r--r-- | src/pugixml.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp index ac036e3..518ceec 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -7998,11 +7998,11 @@ PUGI__NS_BEGIN // gets mantissa digits in the form of 0.xxxxx with 0. implied and the exponent #if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 && !defined(_WIN32_WCE) - PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) { // get base values int sign, exponent; - _ecvt_s(buffer, buffer_size, value, DBL_DIG + 1, &exponent, &sign); + _ecvt_s(buffer, sizeof(buffer), value, DBL_DIG + 1, &exponent, &sign); // truncate redundant zeros truncate_zeros(buffer, buffer + strlen(buffer)); @@ -8012,20 +8012,18 @@ PUGI__NS_BEGIN *out_exponent = exponent; } #else - PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) { // get a scientific notation value with IEEE DBL_DIG decimals #if defined(PUGI__HAVE_SNPRINTF) - snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); + snprintf(buffer, 32, "%.*e", DBL_DIG, value); #elif defined(PUGI__MSVC_CRT_VERSION) - _snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); - buffer[buffer_size - 1] = '\0'; + _snprintf(buffer, 32, "%.*e", DBL_DIG, value); + buffer[31] = '\0'; #else sprintf(buffer, "%.*e", DBL_DIG, value); - assert(strlen(buffer) < buffer_size); #endif - // get the exponent (possibly negative) char* exponent_string = strchr(buffer, 'e'); assert(exponent_string); @@ -8061,7 +8059,7 @@ PUGI__NS_BEGIN char* mantissa; int exponent; - convert_number_to_mantissa_exponent(value, mantissa_buffer, sizeof(mantissa_buffer), &mantissa, &exponent); + convert_number_to_mantissa_exponent(value, mantissa_buffer, &mantissa, &exponent); // allocate a buffer of suitable length for the number size_t result_size = strlen(mantissa_buffer) + (exponent > 0 ? exponent : -exponent) + 4; |