summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorCarlo Wood <carlo@alinoe.com>2003-08-07 19:54:06 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2003-08-07 19:54:06 +0000
commita9ebaa2b6d3d3c0b6a35c575a390a0dadb229461 (patch)
treefcadb74708561aa74eb4aa4f6e4c155610b96c0c /libstdc++-v3
parent97b3d0f016d4ce4b973cda213b0cd6835eca6b15 (diff)
downloadgcc-a9ebaa2b6d3d3c0b6a35c575a390a0dadb229461.tar.gz
demangle.h: Do not use cctype functions that depend on locale.
2003-08-07 Carlo Wood <carlo@alinoe.com> * include/bits/demangle.h: Do not use cctype functions that depend on locale. From-SVN: r70228
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/include/bits/demangle.h24
2 files changed, 20 insertions, 9 deletions
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 <carlo@alinoe.com>
+
+ * include/bits/demangle.h: Do not use cctype functions that depend
+ on locale.
+
2003-08-05 Phil Edwards <pme@gcc.gnu.org>
* 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 <limits>
#include <vector>
#include <string>
-#include <cctype>
#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 <cctype> 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; }
+
//
// <decimal-integer> ::= 0
// ::= 1|2|3|4|5|6|7|8|9 [<digit>+]
@@ -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<Allocator>::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;