Module Name:    src
Committed By:   joerg
Date:           Sat Apr 13 10:21:21 UTC 2013

Modified Files:
        src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd:
            ctype_base.h ctype_noninline.h
        src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd: ctype_base.h
            ctype_noninline.h
        src/lib/libc: shlib_version
        src/lib/libc/citrus: citrus_lc_ctype.c
        src/lib/libc/gen: ctype_.c isctype.c
        src/lib/libc/locale: ctype_local.h global_locale.c rune.c runetable.c
            runetype_local.h runetype_misc.h setlocale_local.h
        src/sys/sys: ctype_bits.h ctype_inline.h

Log Message:
Extend ctype classification table to 16bit. Based on patch by
Takehiko Nozaki, with changes to compile fail when using the old names
and to exploit __BUILD_LEGACY


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
    
src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
cvs rdiff -u -r1.2 -r1.3 \
    src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
cvs rdiff -u -r1.238 -r1.239 src/lib/libc/shlib_version
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/citrus/citrus_lc_ctype.c
cvs rdiff -u -r1.19 -r1.20 src/lib/libc/gen/ctype_.c
cvs rdiff -u -r1.21 -r1.22 src/lib/libc/gen/isctype.c
cvs rdiff -u -r1.4 -r1.5 src/lib/libc/locale/ctype_local.h
cvs rdiff -u -r1.13 -r1.14 src/lib/libc/locale/global_locale.c
cvs rdiff -u -r1.45 -r1.46 src/lib/libc/locale/rune.c
cvs rdiff -u -r1.27 -r1.28 src/lib/libc/locale/runetable.c
cvs rdiff -u -r1.12 -r1.13 src/lib/libc/locale/runetype_local.h
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/locale/runetype_misc.h
cvs rdiff -u -r1.8 -r1.9 src/lib/libc/locale/setlocale_local.h
cvs rdiff -u -r1.2 -r1.3 src/sys/sys/ctype_bits.h src/sys/sys/ctype_inline.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
diff -u src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.2 src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.3
--- src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.2	Tue Jun 21 02:41:39 2011
+++ src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h	Sat Apr 13 10:21:20 2013
@@ -41,18 +41,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
     // NB: Offsets into ctype<char>::_M_table force a particular size
     // on the mask type. Because of this, we don't use an enum.
-    typedef unsigned char      	mask;
+    typedef unsigned short     	mask;
     static const mask upper    	= _CTYPE_U;
     static const mask lower 	= _CTYPE_L;
-    static const mask alpha 	= _CTYPE_U | _CTYPE_L;
-    static const mask digit 	= _CTYPE_N;
-    static const mask xdigit 	= _CTYPE_N | _CTYPE_X;
+    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_P | _CTYPE_U | _CTYPE_L | _CTYPE_N | _CTYPE_B;
-    static const mask graph 	= _CTYPE_P | _CTYPE_U | _CTYPE_L | _CTYPE_N;
+    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_U | _CTYPE_L | _CTYPE_N;
+    static const mask alnum 	= _CTYPE_A | _CTYPE_D;
   };
 
 _GLIBCXX_END_NAMESPACE

Index: src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
diff -u src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.1.1.1 src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.2
--- src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.1.1.1	Tue Jun 21 01:24:50 2011
+++ src/external/gpl3/gcc/dist/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h	Sat Apr 13 10:21:20 2013
@@ -33,11 +33,11 @@
   
 // Information as gleaned from /usr/include/ctype.h
 
-  extern "C" const u_int8_t _C_ctype_[];
+  extern "C" const unsigned short _C_ctype_tab_[];
 
   const ctype_base::mask*
   ctype<char>::classic_table() throw()
-  { return _C_ctype_ + 1; }
+  { return _C_ctype_tab_ + 1; }
 
   ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
 		     size_t __refs) 

Index: src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
diff -u src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.2 src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.3
--- src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h:1.2	Tue Dec 14 02:28:57 2010
+++ src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h	Sat Apr 13 10:21:20 2013
@@ -43,16 +43,16 @@
 
     // NB: Offsets into ctype<char>::_M_table force a particular size
     // on the mask type. Because of this, we don't use an enum.
-    typedef unsigned char      	mask;
+    typedef unsigned short     	mask;
     static const mask upper    	= _CTYPE_U;
     static const mask lower 	= _CTYPE_L;
-    static const mask alpha 	= _CTYPE_U | _CTYPE_L;
-    static const mask digit 	= _CTYPE_N;
-    static const mask xdigit 	= _CTYPE_N | _CTYPE_X;
+    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_P | _CTYPE_U | _CTYPE_L | _CTYPE_N | _CTYPE_B;
-    static const mask graph 	= _CTYPE_P | _CTYPE_U | _CTYPE_L | _CTYPE_N;
+    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_U | _CTYPE_L | _CTYPE_N;
+    static const mask alnum 	= _CTYPE_A | _CTYPE_D;
   };

Index: src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h
diff -u src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.1.1.1 src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.2
--- src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h:1.1.1.1	Thu Apr 20 10:16:24 2006
+++ src/gnu/dist/gcc4/libstdc++-v3/config/os/bsd/netbsd/ctype_noninline.h	Sat Apr 13 10:21:20 2013
@@ -33,11 +33,11 @@
   
 // Information as gleaned from /usr/include/ctype.h
 
-  extern "C" const u_int8_t _C_ctype_[];
+  extern "C" const unsigned short _C_ctype_tab_[];
 
   const ctype_base::mask*
   ctype<char>::classic_table() throw()
-  { return _C_ctype_ + 1; }
+  { return _C_ctype_tab_ + 1; }
 
   ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
 		     size_t __refs) 

Index: src/lib/libc/shlib_version
diff -u src/lib/libc/shlib_version:1.238 src/lib/libc/shlib_version:1.239
--- src/lib/libc/shlib_version:1.238	Fri Apr 12 19:58:46 2013
+++ src/lib/libc/shlib_version	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-#	$NetBSD: shlib_version,v 1.238 2013/04/12 19:58:46 joerg Exp $
+#	$NetBSD: shlib_version,v 1.239 2013/04/13 10:21:20 joerg Exp $
 #	Remember to update distrib/sets/lists/base/shl.* when changing
 #
 # things we wish to do on next major version bump:
@@ -30,9 +30,6 @@
 #   for example in assembler code.
 # - kill sigcontext: never request version 0 or 1 signal trampoline.
 #   always request version 2 trampoline. (on vax, 3).
-# - change _ctype_ table in ctype.h and gen/ctype_.c 8bit -> 16 or 32bit.
-#   it's insufficient bitwidth to implement all ctype class.
-#   see isblank's comment in ctype.h.
 # - remove gets(); it is finally dead in c11.
 # - make __cerror (spelled CERROR) hidden again
 # - remove ruserok() and friends to libcompat (or entirely)

Index: src/lib/libc/citrus/citrus_lc_ctype.c
diff -u src/lib/libc/citrus/citrus_lc_ctype.c:1.10 src/lib/libc/citrus/citrus_lc_ctype.c:1.11
--- src/lib/libc/citrus/citrus_lc_ctype.c:1.10	Sun Mar  4 21:14:55 2012
+++ src/lib/libc/citrus/citrus_lc_ctype.c	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: citrus_lc_ctype.c,v 1.10 2012/03/04 21:14:55 tnozaki Exp $ */
+/* $NetBSD: citrus_lc_ctype.c,v 1.11 2013/04/13 10:21:20 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: citrus_lc_ctype.c,v 1.10 2012/03/04 21:14:55 tnozaki Exp $");
+__RCSID("$NetBSD: citrus_lc_ctype.c,v 1.11 2013/04/13 10:21:20 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "reentrant.h"
@@ -108,6 +108,10 @@ _PREFIX(build_cache)(struct _locale_cach
 	cache->toupper_tab = data->rl_toupper_tab;
 	cache->mb_cur_max = _citrus_ctype_get_mb_cur_max(data->rl_citrus_ctype);
 	cache->items[(size_t)CODESET] = data->rl_codeset;
+
+#ifdef __BUILD_LEGACY
+	cache->compat_bsdctype = data->rl_compat_bsdctype;
+#endif
 }
 
 static __inline void
@@ -116,10 +120,14 @@ _PREFIX(fixup)(_RuneLocale *data)
 	_DIAGASSERT(data != NULL);
 
 	__mb_cur_max = _citrus_ctype_get_mb_cur_max(data->rl_citrus_ctype);
-	_ctype_ = data->rl_ctype_tab;
+	_ctype_tab_ = data->rl_ctype_tab;
 	_tolower_tab_ = data->rl_tolower_tab;
 	_toupper_tab_ = data->rl_toupper_tab;
 	_CurrentRuneLocale = data;
+
+#ifdef __BUILD_LEGACY
+	_ctype_ = data->rl_compat_bsdctype;
+#endif
 }
 
 /*

Index: src/lib/libc/gen/ctype_.c
diff -u src/lib/libc/gen/ctype_.c:1.19 src/lib/libc/gen/ctype_.c:1.20
--- src/lib/libc/gen/ctype_.c:1.19	Tue Dec 14 02:28:57 2010
+++ src/lib/libc/gen/ctype_.c	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ctype_.c,v 1.19 2010/12/14 02:28:57 joerg Exp $	*/
+/*	$NetBSD: ctype_.c,v 1.20 2013/04/13 10:21:20 joerg Exp $	*/
 
 /*
  * Copyright (c) 1989 The Regents of the University of California.
@@ -39,7 +39,7 @@
 #if 0
 /*static char *sccsid = "from: @(#)ctype_.c	5.6 (Berkeley) 6/1/90";*/
 #else
-__RCSID("$NetBSD: ctype_.c,v 1.19 2010/12/14 02:28:57 joerg Exp $");
+__RCSID("$NetBSD: ctype_.c,v 1.20 2013/04/13 10:21:20 joerg Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -51,16 +51,17 @@ __RCSID("$NetBSD: ctype_.c,v 1.19 2010/1
 #error "EOF != -1"
 #endif
 
-#define	_U	_CTYPE_U
-#define	_L	_CTYPE_L
-#define	_N	_CTYPE_N
-#define	_S	_CTYPE_S
-#define	_P	_CTYPE_P
-#define	_C	_CTYPE_C
-#define	_X	_CTYPE_X
-#define	_B	_CTYPE_B
+#ifdef __BUILD_LEGACY
+#define	_C	_COMPAT_C
+#define	_S	_COMPAT_S
+#define	_U	_COMPAT_U
+#define	_X	_COMPAT_X
+#define	_L	_COMPAT_L
+#define	_P	_COMPAT_P
+#define	_B	_COMPAT_B
+#define	_N	_COMPAT_N
 
-const unsigned char _C_ctype_[1 + _CTYPE_NUM_CHARS] = {
+const unsigned char _C_compat_bsdctype[1 + _CTYPE_NUM_CHARS] = {
 	0,
 	_C,	_C,	_C,	_C,	_C,	_C,	_C,	_C,
 	_C,	_C|_S,	_C|_S,	_C|_S,	_C|_S,	_C|_S,	_C,	_C,
@@ -80,4 +81,80 @@ const unsigned char _C_ctype_[1 + _CTYPE
 	_L,	_L,	_L,	_P,	_P,	_P,	_P,	_C
 };
 
-const unsigned char *_ctype_ = &_C_ctype_[0];
+#undef _C
+#undef _S
+#undef _U
+#undef _X
+#undef _L
+#undef _P
+#undef _B
+#undef _N
+
+#ifdef __weak_alias
+__weak_alias(_C_ctype_, _C_compat_bsdctype)
+#endif
+
+const unsigned char *_ctype_ = &_C_compat_bsdctype[0];
+#endif /* __BUILD_LEGACY */
+
+#define	_A	_CTYPE_A
+#define	_BL	_CTYPE_BL
+#define	_C	_CTYPE_C
+#define	_D	_CTYPE_D
+#define	_G	_CTYPE_G
+#define	_L	_CTYPE_L
+#define	_P	_CTYPE_P
+#define	_R	_CTYPE_R
+#define	_S	_CTYPE_S
+#define	_U	_CTYPE_U
+#define	_X	_CTYPE_X
+
+const unsigned short _C_ctype_tab_[1 + _CTYPE_NUM_CHARS] = {
+	0,
+	_C,		_C,		_C,		_C,
+	_C,		_C,		_C,		_C,
+	_C,		_BL|_C|_S,	_C|_S,		_C|_S,
+	_C|_S,		_C|_S,		_C,		_C,
+	_C,		_C,		_C,		_C,
+	_C,		_C,		_C,		_C,
+	_C,		_C,		_C,		_C,
+	_C,		_C,		_C,		_C,
+	_BL|_R|_S,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_D|_G|_R|_X,	_D|_G|_R|_X,	_D|_G|_R|_X,	_D|_G|_R|_X,
+	_D|_G|_R|_X,	_D|_G|_R|_X,	_D|_G|_R|_X,	_D|_G|_R|_X,
+	_D|_G|_R|_X,	_D|_G|_R|_X,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_A|_G|_R|_U|_X,	_A|_G|_R|_U|_X,	_A|_G|_R|_U|_X,
+	_A|_G|_R|_U|_X,	_A|_G|_R|_U|_X,	_A|_G|_R|_U|_X,	_A|_G|_R|_U,
+	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,
+	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,
+	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,
+	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,
+	_A|_G|_R|_U,	_A|_G|_R|_U,	_A|_G|_R|_U,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,
+	_G|_R|_P,	_A|_G|_L|_R|_X,	_A|_G|_L|_R|_X,	_A|_G|_L|_R|_X,
+	_A|_G|_L|_R|_X,	_A|_G|_L|_R|_X,	_A|_G|_L|_R|_X,	_A|_G|_L|_R,
+	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,
+	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,
+	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,
+	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,
+	_A|_G|_L|_R,	_A|_G|_L|_R,	_A|_G|_L|_R,	_G|_R|_P,
+	_G|_R|_P,	_G|_R|_P,	_G|_R|_P,	_C,
+};
+
+#undef _A
+#undef _BL
+#undef _C
+#undef _D
+#undef _G
+#undef _L
+#undef _P
+#undef _R
+#undef _S
+#undef _U
+#undef _X
+
+const unsigned short *_ctype_tab_ = &_C_ctype_tab_[0];

Index: src/lib/libc/gen/isctype.c
diff -u src/lib/libc/gen/isctype.c:1.21 src/lib/libc/gen/isctype.c:1.22
--- src/lib/libc/gen/isctype.c:1.21	Tue Dec 14 02:28:57 2010
+++ src/lib/libc/gen/isctype.c	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: isctype.c,v 1.21 2010/12/14 02:28:57 joerg Exp $ */
+/* $NetBSD: isctype.c,v 1.22 2013/04/13 10:21:20 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: isctype.c,v 1.21 2010/12/14 02:28:57 joerg Exp $");
+__RCSID("$NetBSD: isctype.c,v 1.22 2013/04/13 10:21:20 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -55,24 +55,18 @@ is##name(int c) \
 	return (int)(_CTYPE_TAB(ctype_tab, c) & (bit)); \
 }
 
-_ISCTYPE_FUNC(alnum,  _CTYPE_U|_CTYPE_L|_CTYPE_N      )
-_ISCTYPE_FUNC(alpha,  _CTYPE_U|_CTYPE_L         )
+_ISCTYPE_FUNC(alnum, (_CTYPE_A|_CTYPE_D))
+_ISCTYPE_FUNC(alpha,  _CTYPE_A)
+_ISCTYPE_FUNC(blank,  _CTYPE_BL)
 _ISCTYPE_FUNC(cntrl,  _CTYPE_C            )
-_ISCTYPE_FUNC(digit,  _CTYPE_N            )
-_ISCTYPE_FUNC(graph,  _CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N   )
+_ISCTYPE_FUNC(digit,  _CTYPE_D)
+_ISCTYPE_FUNC(graph,  _CTYPE_G)
 _ISCTYPE_FUNC(lower,  _CTYPE_L            )
-_ISCTYPE_FUNC(print,  _CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B)
+_ISCTYPE_FUNC(print,  _CTYPE_R)
 _ISCTYPE_FUNC(punct,  _CTYPE_P            )
 _ISCTYPE_FUNC(space,  _CTYPE_S            )
 _ISCTYPE_FUNC(upper,  _CTYPE_U            )
-_ISCTYPE_FUNC(xdigit, _CTYPE_N|_CTYPE_X         )
-
-int
-isblank(int c)
-{
-	/* XXX: FIXME */
-        return c == ' ' || c == '\t';
-}
+_ISCTYPE_FUNC(xdigit, _CTYPE_X)
 
 int
 toupper(int c)

Index: src/lib/libc/locale/ctype_local.h
diff -u src/lib/libc/locale/ctype_local.h:1.4 src/lib/libc/locale/ctype_local.h:1.5
--- src/lib/libc/locale/ctype_local.h:1.4	Sun Jun 13 04:14:57 2010
+++ src/lib/libc/locale/ctype_local.h	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ctype_local.h,v 1.4 2010/06/13 04:14:57 tnozaki Exp $ */
+/* $NetBSD: ctype_local.h,v 1.5 2013/04/13 10:21:20 joerg Exp $ */
 
 /*-
  * Copyright (c) 2010 Citrus Project,
@@ -33,8 +33,22 @@
 #define _CTYPE_NUM_CHARS	(1 << CHAR_BIT)
 #define _CTYPE_CACHE_SIZE	(1 << 8)
 
-extern const unsigned char _C_ctype_[];
-extern const short _C_toupper_[];
-extern const short _C_tolower_[];
+#define _COMPAT_U	0x01
+#define _COMPAT_L	0x02
+#define _COMPAT_N	0x04
+#define _COMPAT_S	0x08
+#define _COMPAT_P	0x10
+#define _COMPAT_C	0x20
+#define _COMPAT_X	0x40
+#define _COMPAT_B	0x80
+
+extern const unsigned short _C_ctype_tab_[];
+extern const short _C_toupper_tab_[];
+extern const short _C_tolower_tab_[];
+
+#ifdef __BUILD_LEGACY
+extern const unsigned char	*_ctype_;
+extern const unsigned char	_C_compat_bsdctype[];
+#endif
 
 #endif /*_CTYPE_LOCAL_H_*/

Index: src/lib/libc/locale/global_locale.c
diff -u src/lib/libc/locale/global_locale.c:1.13 src/lib/libc/locale/global_locale.c:1.14
--- src/lib/libc/locale/global_locale.c:1.13	Wed Mar 21 14:11:24 2012
+++ src/lib/libc/locale/global_locale.c	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: global_locale.c,v 1.13 2012/03/21 14:11:24 christos Exp $ */
+/* $NetBSD: global_locale.c,v 1.14 2013/04/13 10:21:20 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: global_locale.c,v 1.13 2012/03/21 14:11:24 christos Exp $");
+__RCSID("$NetBSD: global_locale.c,v 1.14 2013/04/13 10:21:20 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/types.h>
@@ -135,12 +135,16 @@ static const char *_global_items[(size_t
 };
 
 static struct _locale_cache_t _global_cache = {
-    .ctype_tab   = (const unsigned char *)&_C_ctype_[0],
-    .tolower_tab = (const short *)&_C_tolower_[0],
-    .toupper_tab = (const short *)&_C_toupper_[0],
+    .ctype_tab = (const unsigned short *)&_C_ctype_tab_[0],
+    .tolower_tab = (const short *)&_C_tolower_tab_[0],
+    .toupper_tab = (const short *)&_C_toupper_tab_[0],
     .mb_cur_max = (size_t)1,
     .ldata = &_global_ldata,
     .items = &_global_items[0],
+
+#ifdef __BUILD_LEGACY
+    .compat_bsdctype = (const unsigned char *)&_C_compat_bsdctype[0],
+#endif
 };
 
 struct _locale_impl_t _global_locale = {

Index: src/lib/libc/locale/rune.c
diff -u src/lib/libc/locale/rune.c:1.45 src/lib/libc/locale/rune.c:1.46
--- src/lib/libc/locale/rune.c:1.45	Wed Aug  8 20:16:50 2012
+++ src/lib/libc/locale/rune.c	Sat Apr 13 10:21:20 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rune.c,v 1.45 2012/08/08 20:16:50 wiz Exp $	*/
+/*	$NetBSD: rune.c,v 1.46 2013/04/13 10:21:20 joerg Exp $	*/
 /*-
  * Copyright (c)2010 Citrus Project,
  * All rights reserved.
@@ -54,10 +54,14 @@
 
 typedef struct {
 	_RuneLocale rl;
-	unsigned char	rlp_ctype_tab  [_CTYPE_NUM_CHARS + 1];
+	unsigned short	rlp_ctype_tab  [_CTYPE_NUM_CHARS + 1];
 	short		rlp_tolower_tab[_CTYPE_NUM_CHARS + 1];
 	short		rlp_toupper_tab[_CTYPE_NUM_CHARS + 1];
 	char		rlp_codeset[33]; /* XXX */
+
+#ifdef __BUILD_LEGACY
+	unsigned char	rlp_compat_bsdctype[_CTYPE_NUM_CHARS + 1];
+#endif
 } _RuneLocalePriv;
 
 static __inline void
@@ -88,19 +92,29 @@ _rune_init_priv(_RuneLocalePriv *rlp)
 		rlp->rlp_ctype_tab  [i + 1] = 0;
 		rlp->rlp_tolower_tab[i + 1] = i;
 		rlp->rlp_toupper_tab[i + 1] = i;
+
+#ifdef __BUILD_LEGACY
+		rlp->rlp_compat_bsdctype[i + 1] = 0;
+#endif
 	}
 #endif
 	rlp->rlp_ctype_tab  [0] = 0;
 	rlp->rlp_tolower_tab[0] = EOF;
 	rlp->rlp_toupper_tab[0] = EOF;
 
-	rlp->rl.rl_ctype_tab   = (const unsigned char *)&rlp->rlp_ctype_tab[0];
+	rlp->rl.rl_ctype_tab   = (const unsigned short *)&rlp->rlp_ctype_tab[0];
 	rlp->rl.rl_tolower_tab = (const short *)&rlp->rlp_tolower_tab[0];
 	rlp->rl.rl_toupper_tab = (const short *)&rlp->rlp_toupper_tab[0];
 	rlp->rl.rl_codeset     = (const char *)&rlp->rlp_codeset[0];
 
 	_rune_wctype_init(&rlp->rl);
 	_rune_wctrans_init(&rlp->rl);
+
+#ifdef __BUILD_LEGACY
+	rlp->rlp_compat_bsdctype[0] = 0;
+	rlp->rl.rl_compat_bsdctype = (const unsigned char *)
+	    &rlp->rlp_compat_bsdctype[0];
+#endif
 }
 
 static __inline void
@@ -129,6 +143,35 @@ _rune_find_codeset(char *s, size_t n,
 	*s = '\0';
 }
 
+#ifdef __BUILD_LEGACY
+static __inline int
+_runetype_to_bsdctype(_RuneType bits)
+{
+	int ret;
+
+	if (bits == (_RuneType)0)
+		return 0;
+	ret = 0;
+	if (bits & _RUNETYPE_U)
+		ret |= _COMPAT_U;
+	if (bits & _RUNETYPE_L)
+		ret |= _COMPAT_L;
+	if (bits & _RUNETYPE_D)
+		ret |= _COMPAT_N;
+	if (bits & _RUNETYPE_S)
+		ret |= _COMPAT_S;
+	if (bits & _RUNETYPE_P)
+		ret |= _COMPAT_P;
+	if (bits & _RUNETYPE_C)
+		ret |= _COMPAT_C;
+	if ((bits & (_RUNETYPE_X | _RUNETYPE_D)) == _RUNETYPE_X)
+		ret |= _COMPAT_X;
+	if ((bits & (_RUNETYPE_R | _RUNETYPE_G)) == _RUNETYPE_R)
+		ret |= _COMPAT_B;
+	return ret;
+}
+#endif /* __BUILD_LEGACY */
+
 static __inline int
 _rune_read_file(const char * __restrict var, size_t lenvar,
     _RuneLocale ** __restrict prl)
@@ -242,6 +285,7 @@ do {									\
 
 	for (i = 0; i < _CTYPE_CACHE_SIZE; ++i) {
 		wint_t wc;
+		_RuneType rc;
 
 		ret = _citrus_ctype_btowc(rl->rl_citrus_ctype, i, &wc);
 		if (ret)
@@ -251,8 +295,14 @@ do {									\
 			rlp->rlp_tolower_tab[i + 1] = i;
 			rlp->rlp_toupper_tab[i + 1] = i;
 		} else {
-			rlp->rlp_ctype_tab[i + 1] = (unsigned char)
-			    _runetype_to_ctype(_runetype_priv(rl, wc));
+			rc = _runetype_priv(rl, wc);
+			rlp->rlp_ctype_tab[i + 1] = (unsigned short)
+			    ((rc & ~_RUNETYPE_SWM) >> 8);
+
+#ifdef __BUILD_LEGACY
+			rlp->rlp_compat_bsdctype[i + 1]
+			  = _runetype_to_bsdctype(rc);
+#endif
 
 #define CONVERT_MAP(name)						\
 do {									\

Index: src/lib/libc/locale/runetable.c
diff -u src/lib/libc/locale/runetable.c:1.27 src/lib/libc/locale/runetable.c:1.28
--- src/lib/libc/locale/runetable.c:1.27	Sat Jun 19 13:26:52 2010
+++ src/lib/libc/locale/runetable.c	Sat Apr 13 10:21:21 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: runetable.c,v 1.27 2010/06/19 13:26:52 tnozaki Exp $	*/
+/*	$NetBSD: runetable.c,v 1.28 2013/04/13 10:21:21 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)table.c	8.1 (Berkeley) 6/27/93";
 #else
-__RCSID("$NetBSD: runetable.c,v 1.27 2010/06/19 13:26:52 tnozaki Exp $");
+__RCSID("$NetBSD: runetable.c,v 1.28 2013/04/13 10:21:21 joerg Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -343,9 +343,13 @@ const _RuneLocale _DefaultRuneLocale = {
 	    { "upper", _RUNETYPE_U },
 	    { "xdigit", _RUNETYPE_X },
     },
-    _C_ctype_,
-    _C_tolower_,
-    _C_toupper_
+    _C_ctype_tab_,
+    _C_tolower_tab_,
+    _C_toupper_tab_,
+
+#ifdef __BUILD_LEGACY
+    _C_compat_bsdctype,
+#endif
 };
 
 const _RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;

Index: src/lib/libc/locale/runetype_local.h
diff -u src/lib/libc/locale/runetype_local.h:1.12 src/lib/libc/locale/runetype_local.h:1.13
--- src/lib/libc/locale/runetype_local.h:1.12	Sun Jun 20 02:23:15 2010
+++ src/lib/libc/locale/runetype_local.h	Sat Apr 13 10:21:21 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: runetype_local.h,v 1.12 2010/06/20 02:23:15 tnozaki Exp $	*/
+/*	$NetBSD: runetype_local.h,v 1.13 2013/04/13 10:21:21 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -42,7 +42,8 @@
 #include <sys/types.h>
 #include <stdio.h>
 
-#include "runetype_misc.h"
+#include "ctype_local.h"
+#include "runetype_file.h"
 
 #define _RUNE_ISCACHED(c)	((c)>=0 && (c)<_CTYPE_CACHE_SIZE)
 
@@ -123,9 +124,13 @@ typedef struct _RuneLocale {
 	_WCTransEntry			rl_wctrans[_WCTRANS_NINDEXES];
 	_WCTypeEntry			rl_wctype[_WCTYPE_NINDEXES];
 
-	const unsigned char		*rl_ctype_tab;
+	const unsigned short		*rl_ctype_tab;
 	const short			*rl_tolower_tab;
 	const short			*rl_toupper_tab;
+
+#ifdef __BUILD_LEGACY
+	const unsigned char		*rl_compat_bsdctype;
+#endif
 } _RuneLocale;
 
 /*

Index: src/lib/libc/locale/runetype_misc.h
diff -u src/lib/libc/locale/runetype_misc.h:1.3 src/lib/libc/locale/runetype_misc.h:1.4
--- src/lib/libc/locale/runetype_misc.h:1.3	Wed Jan 18 14:22:27 2012
+++ src/lib/libc/locale/runetype_misc.h	Sat Apr 13 10:21:21 2013
@@ -1,82 +0,0 @@
-/* $NetBSD: runetype_misc.h,v 1.3 2012/01/18 14:22:27 joerg Exp $ */
-
-/*-
- * Copyright (c) 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)runetype.h	8.1 (Berkeley) 6/2/93
- */
-
-#ifndef	_RUNETYPE_MISC_H_
-#define	_RUNETYPE_MISC_H_
-
-#include <sys/ctype_bits.h>
-#include "runetype_file.h"
-
-static __inline int
-_runetype_to_ctype(_RuneType bits)
-{
-	int ret;
-
-	if (bits == (_RuneType)0)
-		return 0;
-	ret = 0;
-	if (bits & _RUNETYPE_U)
-		ret |= _CTYPE_U;
-	if (bits & _RUNETYPE_L)
-		ret |= _CTYPE_L;
-	if (bits & _RUNETYPE_D)
-		ret |= _CTYPE_N;
-	if (bits & _RUNETYPE_S)
-		ret |= _CTYPE_S;
-	if (bits & _RUNETYPE_P)
-		ret |= _CTYPE_P;
-	if (bits & _RUNETYPE_C)
-		ret |= _CTYPE_C;
-	if (bits & _RUNETYPE_X)
-		ret |= _CTYPE_X;
-	/*
-	 * TWEAK!  _B has been used incorrectly (or with older
-	 * declaration) in ctype.h isprint() macro.
-	 * _B does not mean isblank, it means "isprint && !isgraph".
-	 * the following is okay since isblank() was hardcoded in
-	 * function (i.e. isblank() is inherently locale unfriendly).
-	 */
-#if 1
-	if ((bits & (_RUNETYPE_R | _RUNETYPE_G)) == _RUNETYPE_R)
-		ret |= _CTYPE_B;
-#else
-	if (bits & _RUNETYPE_B)
-		ret |= _CTYPE_B;
-#endif
-	return ret;
-}
-
-#endif	/* !_RUNETYPE_MISC_H_ */

Index: src/lib/libc/locale/setlocale_local.h
diff -u src/lib/libc/locale/setlocale_local.h:1.8 src/lib/libc/locale/setlocale_local.h:1.9
--- src/lib/libc/locale/setlocale_local.h:1.8	Sun Mar  4 21:14:57 2012
+++ src/lib/libc/locale/setlocale_local.h	Sat Apr 13 10:21:21 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: setlocale_local.h,v 1.8 2012/03/04 21:14:57 tnozaki Exp $ */
+/* $NetBSD: setlocale_local.h,v 1.9 2013/04/13 10:21:21 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -29,6 +29,8 @@
 #ifndef _SETLOCALE_LOCAL_H_
 #define _SETLOCALE_LOCAL_H_
 
+#include "ctype_local.h"
+
 #define _LOCALENAME_LEN_MAX 33
 
 #define _C_LOCALE		"C"
@@ -40,12 +42,15 @@ extern const char		*_PathLocale;
 typedef void *_locale_part_t;
 
 struct _locale_cache_t {
-	const unsigned char *ctype_tab;
+	const unsigned short *ctype_tab;
 	const short *tolower_tab;
 	const short *toupper_tab;
 	size_t mb_cur_max;
 	struct lconv *ldata;
 	const char **items;
+#ifdef __BUILD_LEGACY
+	const unsigned char *compat_bsdctype;
+#endif
 };
 
 struct _locale_impl_t {

Index: src/sys/sys/ctype_bits.h
diff -u src/sys/sys/ctype_bits.h:1.2 src/sys/sys/ctype_bits.h:1.3
--- src/sys/sys/ctype_bits.h:1.2	Tue Dec 14 02:28:57 2010
+++ src/sys/sys/ctype_bits.h	Sat Apr 13 10:21:21 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ctype_bits.h,v 1.2 2010/12/14 02:28:57 joerg Exp $ */
+/* $NetBSD: ctype_bits.h,v 1.3 2013/04/13 10:21:21 joerg Exp $ */
 
 /*
  * Copyright (c) 1989 The Regents of the University of California.
@@ -40,16 +40,22 @@
 #ifndef _SYS_CTYPE_BITS_H_
 #define _SYS_CTYPE_BITS_H_
 
-#define	_CTYPE_U	0x01
-#define	_CTYPE_L	0x02
-#define	_CTYPE_N	0x04
-#define	_CTYPE_S	0x08
-#define	_CTYPE_P	0x10
-#define	_CTYPE_C	0x20
-#define	_CTYPE_X	0x40
-#define	_CTYPE_B	0x80
+#define	_CTYPE_A	0x0001	/* Alpha     */
+#define	_CTYPE_C	0x0002	/* Control   */
+#define	_CTYPE_D	0x0004	/* Digit     */
+#define	_CTYPE_G	0x0008	/* Graph     */
+#define	_CTYPE_L	0x0010	/* Lower     */
+#define	_CTYPE_P	0x0020	/* Punct     */
+#define	_CTYPE_S	0x0040	/* Space     */
+#define	_CTYPE_U	0x0080	/* Upper     */
+#define	_CTYPE_X	0x0100	/* X digit   */
+#define	_CTYPE_BL	0x0200	/* Blank     */
+#define	_CTYPE_R	0x0400	/* Print     */
+#define	_CTYPE_I	0x0800	/* Ideogram  */
+#define	_CTYPE_T	0x1000	/* Special   */
+#define	_CTYPE_Q	0x2000	/* Phonogram */
 
-extern const unsigned char	*_ctype_;
+extern const unsigned short	*_ctype_tab_;
 extern const short	*_tolower_tab_;
 extern const short	*_toupper_tab_;
 
Index: src/sys/sys/ctype_inline.h
diff -u src/sys/sys/ctype_inline.h:1.2 src/sys/sys/ctype_inline.h:1.3
--- src/sys/sys/ctype_inline.h:1.2	Tue Dec 14 02:28:57 2010
+++ src/sys/sys/ctype_inline.h	Sat Apr 13 10:21:21 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ctype_inline.h,v 1.2 2010/12/14 02:28:57 joerg Exp $ */
+/* $NetBSD: ctype_inline.h,v 1.3 2013/04/13 10:21:21 joerg Exp $ */
 
 /*
  * Copyright (c) 1989 The Regents of the University of California.
@@ -45,17 +45,17 @@
 
 #include <sys/ctype_bits.h>
 
-#define	isdigit(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_N))
-#define	islower(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_L))
-#define	isspace(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_S))
-#define	ispunct(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_P))
-#define	isupper(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_U))
-#define	isalpha(c)	((int)((_ctype_ + 1)[(c)] & (_CTYPE_U|_CTYPE_L)))
-#define	isxdigit(c)	((int)((_ctype_ + 1)[(c)] & (_CTYPE_N|_CTYPE_X)))
-#define	isalnum(c)	((int)((_ctype_ + 1)[(c)] & (_CTYPE_U|_CTYPE_L|_CTYPE_N)))
-#define	isprint(c)	((int)((_ctype_ + 1)[(c)] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B)))
-#define	isgraph(c)	((int)((_ctype_ + 1)[(c)] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N)))
-#define	iscntrl(c)	((int)((_ctype_ + 1)[(c)] & _CTYPE_C))
+#define	isalnum(c)	((int)((_ctype_tab_ + 1)[(c)] & (_CTYPE_A|_CTYPE_D)))
+#define	isalpha(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_A))
+#define	iscntrl(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_C))
+#define	isdigit(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_D))
+#define	isgraph(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_G))
+#define	islower(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_L))
+#define	isprint(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_R))
+#define	ispunct(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_P))
+#define	isspace(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_S))
+#define	isupper(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_U))
+#define	isxdigit(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_X))
 #define	tolower(c)	((int)((_tolower_tab_ + 1)[(c)]))
 #define	toupper(c)	((int)((_toupper_tab_ + 1)[(c)]))
 
@@ -68,15 +68,7 @@
 
 #if defined(_ISO_C99_SOURCE) || (_POSIX_C_SOURCE - 0) > 200112L || \
     (_XOPEN_SOURCE - 0) > 600 || defined(_NETBSD_SOURCE)
-
-/*
- * isblank() is implemented as C function, due to insufficient bitwidth in
- * _ctype_.  Note that _B does not mean isblank - it means isprint && !isgraph.
- */
-#if 0
-#define isblank(c)	((int)((_ctype_ + 1)[(c)] & _B))
-#endif
-
+#define	isblank(c)	((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_BL))
 #endif
 
 #endif /* !_CTYPE_INLINE_H_ */

Reply via email to