On Sun, 1 May 2022 at 19:21, Patrick Palka via Libstdc++ <libstd...@gcc.gnu.org> wrote: > > As in r12-6281-gc83ecfbe74a5cf for std::isdigit, <charconv> shouldn't > use std::tolower either I think. > > Tested on x86_64-pc-linux-gnu, does this look OK for trunk/11 and the > 12 branch after it's thawed?
OK, thanks. > > PR libstdc++/103911 > > libstdc++-v3/ChangeLog: > > * src/c++17/floating_from_chars.cc (find_end_of_float): Accept > two possible 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. > --- > libstdc++-v3/src/c++17/floating_from_chars.cc | 11 +++++------ > 1 file 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 e7f3a58cf18..5d2a931d5dd 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()) > { > -- > 2.36.0.44.g0f828332d5 >