diff options
author | Patrick Palka <ppalka@redhat.com> | 2022-05-02 07:01:33 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2022-05-02 07:01:33 -0400 |
commit | 86d821ddf5615e693ead667b2580898f46de8eb9 (patch) | |
tree | 6662313539316fdd8baa101eb4b6bc3c462cab8e | |
parent | 576f975cabb0fd9843de152a2d247d486a967b08 (diff) | |
download | gcc-86d821ddf5615e693ead667b2580898f46de8eb9.zip gcc-86d821ddf5615e693ead667b2580898f46de8eb9.tar.gz gcc-86d821ddf5615e693ead667b2580898f46de8eb9.tar.bz2 |
libstdc++: Don't use std::tolower in <charconv> [PR103911]
As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using
std::tolower in <charconv> either.
PR libstdc++/103911
libstdc++-v3/ChangeLog:
* src/c++17/floating_from_chars.cc (find_end_of_float): Accept
two delimeters for the exponent part in the form of a possibly
NULL string of length two. Don't use std::tolower.
(pattern): Adjust calls to find_end_of_float accordingly.
-rw-r--r-- | libstdc++-v3/src/c++17/floating_from_chars.cc | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/libstdc++-v3/src/c++17/floating_from_chars.cc b/libstdc++-v3/src/c++17/floating_from_chars.cc index e7f3a58..5d2a931 100644 --- a/libstdc++-v3/src/c++17/floating_from_chars.cc +++ b/libstdc++-v3/src/c++17/floating_from_chars.cc @@ -40,7 +40,6 @@ #include <cmath> #include <cstdlib> #include <cstring> -#include <cctype> #include <locale.h> #include <bits/functexcept.h> #if _GLIBCXX_HAVE_XLOCALE_H @@ -142,10 +141,10 @@ namespace // Find initial portion of [first, last) containing a floating-point number. // The string `digits` is either `dec_digits` or `hex_digits` - // and `exp` is 'e' or 'p' or '\0'. + // and `exp` is "eE", "pP" or NULL. const char* find_end_of_float(const char* first, const char* last, const char* digits, - char exp) + const char *exp) { while (first < last && strchr(digits, *first) != nullptr) ++first; @@ -155,7 +154,7 @@ namespace while (first < last && strchr(digits, *first)) ++first; } - if (first < last && exp != 0 && std::tolower((unsigned char)*first) == exp) + if (first < last && exp != nullptr && (*first == exp[0] || *first == exp[1])) { ++first; if (first < last && (*first == '-' || *first == '+')) @@ -237,7 +236,7 @@ namespace if ((last - first + 2) > buffer_resource::guaranteed_capacity()) { - last = find_end_of_float(first + neg, last, digits, 'p'); + last = find_end_of_float(first + neg, last, digits, "pP"); #ifndef __cpp_exceptions if ((last - first + 2) > buffer_resource::guaranteed_capacity()) { @@ -261,7 +260,7 @@ namespace if ((last - first) > buffer_resource::guaranteed_capacity()) { last = find_end_of_float(first + neg, last, digits, - "e"[fmt == chars_format::fixed]); + fmt == chars_format::fixed ? nullptr : "eE"); #ifndef __cpp_exceptions if ((last - first) > buffer_resource::guaranteed_capacity()) { |