Here are the three patches as requested for #64271.
--- libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h.orig 2014-12-10
22:19:05.0 +0100
+++ libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h2014-12-10
22:20:46.0 +0100
@@ -48,7 +48,7 @@
is(const char* __low, const char* __high, mask* __vec) const
{
while (__low < __high)
- *__vec++ = _M_table[*__low++];
+ *__vec++ = _M_table[(unsigned char)*__low++];
return __high;
}
--- libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc.orig
2014-12-10 22:19:26.0 +0100
+++ libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc 2014-12-10
22:21:15.0 +0100
@@ -38,11 +38,17 @@
// Information as gleaned from /usr/include/ctype.h
+#ifndef _CTYPE_BL
extern "C" const u_int8_t _C_ctype_[];
+#endif
const ctype_base::mask*
ctype::classic_table() throw()
- { return _C_ctype_ + 1; }
+#ifdef _CTYPE_BL
+ { return _C_ctype_tab_ + 1; }
+#else
+ { return _C_ctype_ + 1; }
+#endif
ctype::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
@@ -69,14 +75,14 @@
char
ctype::do_toupper(char __c) const
- { return ::toupper((int) __c); }
+ { return ::toupper((int)(unsigned char) __c); }
const char*
ctype::do_toupper(char* __low, const char* __high) const
{
while (__low < __high)
{
- *__low = ::toupper((int) *__low);
+ *__low = ::toupper((int)(unsigned char) *__low);
++__low;
}
return __high;
@@ -84,14 +90,14 @@
char
ctype::do_tolower(char __c) const
- { return ::tolower((int) __c); }
+ { return ::tolower((int)(unsigned char) __c); }
const char*
ctype::do_tolower(char* __low, const char* __high) const
{
while (__low < __high)
{
- *__low = ::tolower((int) *__low);
+ *__low = ::tolower((int)(unsigned char) *__low);
++__low;
}
return __high;
--- libstdc++-v3/config/os/bsd/netbsd/ctype_base.h.orig 2014-12-10
22:18:50.0 +0100
+++ libstdc++-v3/config/os/bsd/netbsd/ctype_base.h 2014-12-10
22:20:31.0 +0100
@@ -43,9 +43,22 @@
// NB: Offsets into ctype::_M_table force a particular size
// on the mask type. Because of this, we don't use an enum.
-typedef unsigned char mask;
-#ifndef _CTYPE_U
+#if defined(_CTYPE_BL)
+typedef unsigned short mask;
+static const mask upper = _CTYPE_U;
+static const mask lower = _CTYPE_L;
+static const mask alpha = _CTYPE_A;
+static const mask digit = _CTYPE_D;
+static const mask xdigit= _CTYPE_X;
+static const mask space = _CTYPE_S;
+static const mask print = _CTYPE_R;
+static const mask graph = _CTYPE_G;
+static const mask cntrl = _CTYPE_C;
+static const mask punct = _CTYPE_P;
+static const mask alnum = _CTYPE_A | _CTYPE_D;
+#elif !defined(_CTYPE_U)
+typedef unsigned char mask;
static const mask upper= _U;
static const mask lower= _L;
static const mask alpha= _U | _L;
@@ -58,6 +71,7 @@
static const mask punct= _P;
static const mask alnum= _U | _L | _N;
#else
+typedef unsigned char mask;
static const mask upper= _CTYPE_U;
static const mask lower= _CTYPE_L;
static const mask alpha= _CTYPE_U | _CTYPE_L;