From: Carlo Wood Date: Thu, 7 Aug 2003 19:54:06 +0000 (+0000) Subject: demangle.h: Do not use cctype functions that depend on locale. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9ebaa2b6d3d3c0b6a35c575a390a0dadb229461;p=gcc.git demangle.h: Do not use cctype functions that depend on locale. 2003-08-07 Carlo Wood * include/bits/demangle.h: Do not use cctype functions that depend on locale. From-SVN: r70228 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 62440e989fb..910f6ad9085 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2003-08-07 Carlo Wood + + * include/bits/demangle.h: Do not use cctype functions that depend + on locale. + 2003-08-05 Phil Edwards * configure.in: Rename... diff --git a/libstdc++-v3/include/bits/demangle.h b/libstdc++-v3/include/bits/demangle.h index d6fdcd58c3e..cc496513cb9 100644 --- a/libstdc++-v3/include/bits/demangle.h +++ b/libstdc++-v3/include/bits/demangle.h @@ -31,10 +31,8 @@ #ifndef _DEMANGLER_H #define _DEMANGLER_H 1 -#include #include #include -#include #ifndef _GLIBCXX_DEMANGLER_DEBUG #define _GLIBCXX_DEMANGLER_CWDEBUG 0 @@ -453,6 +451,14 @@ namespace __gnu_cxx } } + // We don't want to depend on locale (or include for that matter). + // We also don't want to use "safe-ctype.h" because that headerfile is not + // available to the users. + inline bool isdigit(char c) { return c >= '0' && c <= '9'; } + inline bool islower(char c) { return c >= 'a' && c <= 'z'; } + inline bool isupper(char c) { return c >= 'A' && c <= 'Z'; } + inline char tolower(char c) { return isupper(c) ? c - 'A' + 'a' : c; } + // // ::= 0 // ::= 1|2|3|4|5|6|7|8|9 [+] @@ -468,7 +474,7 @@ namespace __gnu_cxx output += '0'; eat_current(); } - else if (!std::isdigit(c)) + else if (!isdigit(c)) M_result = false; else { @@ -476,7 +482,7 @@ namespace __gnu_cxx { output += c; } - while (std::isdigit((c = next()))); + while (isdigit((c = next()))); } return M_result; } @@ -699,7 +705,7 @@ namespace __gnu_cxx default: for(;; c = next()) { - if (std::isdigit(c)) + if (isdigit(c)) value = value * 36 + c - '0'; else if (isupper(c)) value = value * 36 + c - 'A' + 10; @@ -782,7 +788,7 @@ namespace __gnu_cxx char c; if ((c = next()) != '_') { - while(std::isdigit(c)) + while(isdigit(c)) { value = value * 10 + c - '0'; c = next(); @@ -1903,7 +1909,7 @@ namespace __gnu_cxx int length = current() - '0'; if (length < 1 || length > 9) _GLIBCXX_DEMANGLER_FAILURE; - while(std::isdigit(next())) + while(isdigit(next())) length = 10 * length + current() - '0'; char const* ptr = &M_str[M_pos]; if (length > 11 && !strncmp(ptr, "_GLOBAL_", 8) && ptr[9] == 'N' @@ -1932,7 +1938,7 @@ namespace __gnu_cxx session::decode_unqualified_name(string_type& output) { _GLIBCXX_DEMANGLER_DOUT_ENTERING("decode_unqualified_name"); - if (std::isdigit(current())) + if (isdigit(current())) { if (!M_inside_template_args) { @@ -2187,7 +2193,7 @@ namespace __gnu_cxx eat_current(); if (!decode_type(first)) _GLIBCXX_DEMANGLER_FAILURE; - while(std::isdigit(current())) + while(isdigit(current())) eat_current(); if (eat_current() != '_') _GLIBCXX_DEMANGLER_FAILURE;