This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH/RFA] Internationalize ctype functionality
- From: Corinna Vinschen <vinschen at redhat dot com>
- To: newlib at sourceware dot org
- Date: Mon, 30 Mar 2009 15:18:37 +0200
- Subject: Re: [PATCH/RFA] Internationalize ctype functionality
- References: <20090326210123.GS12738@calimero.vinschen.de>
- Reply-to: newlib at sourceware dot org
On Mar 26 22:01, Corinna Vinschen wrote:
> Hi,
>
> as I threatened this list with already, I've now converted the ctype
> functionality to an extensible, internationalized variation.
> [...]
New patch below. I changed the toupper/tolower functions to check for
islower/isupper before calling the mbtowc/tow{upper,lower}/wctomb
routine. This should speed up loops using toupper/tolower
unconditionally on native language input.
Corinna
* libc/ctype/Makefile.am: Remove _tolower.c and _toupper.c
source files. Add a dependency rule for ctype_o to note
changes in ctype_iso.h and ctype_cp.h.
* libc/ctype/Makefile.in: Regenerate.
* libc/ctype/_tolower.c: Remove file.
* libc/ctype/_toupper.c: Remove file.
* libc/ctype/ctype_.c: Make sure ALLOW_NEGATIVE_CTYPE_INDEX
is always defined on Cygwin.
(_ctype_b): Don't make `static const' on Cygwin.
(ctype_iso.h): Include if _MB_EXTENDED_CHARSETS_ISO is set.
(ctype_cp.h): Include if _MB_EXTENDED_CHARSETS_WINDOWS is set.
(__ctype_ptr): Drop definition.
(__ctype_ptr__): De-constify.
(_ctype_): Add Cygwin-specifc asm define.
(__set_ctype): New function to set __ctype_ptr__ according to
current charset.
* libc/ctype/ctype_cp.h: New file containing Windows codepage
specific character class tables.
* libc/ctype/ctype_iso.h: New file containing ISO-8859-x
specific character class tables.
* libc/ctype/tolower.c (tolower): Reimplement in _MB_CAPABLE
case to support any singlebyte charset.
* libc/ctype/toupper.c (toupper): Ditto.
* libc/include/ctype.h (_tolower): Define as macro per POSIX.
(_toupper): Ditto.
(__ctype_ptr__): De-constify.
(toupper): Disable macro in _MB_CAPABLE case.
(tolower): Ditto.
* libc/locale/locale.c: Declare __set_ctype unconditionally.
(loadlocale): Remove __CYGWIN__ guard around __set_ctype call.
Index: libc/ctype/Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/Makefile.am,v
retrieving revision 1.8
diff -u -p -r1.8 Makefile.am
--- libc/ctype/Makefile.am 9 May 2006 21:53:35 -0000 1.8
+++ libc/ctype/Makefile.am 30 Mar 2009 13:16:29 -0000
@@ -41,8 +41,6 @@ ELIX_SOURCES = \
iswxdigit.c \
jp2uc.c \
toascii.c \
- _tolower.c \
- _toupper.c \
towctrans.c \
towlower.c \
towupper.c \
@@ -113,3 +111,5 @@ doc: $(CHEWOUT_FILES)
cat $(srcdir)/ctype.tex >> $(TARGETDOC)
CLEANFILES = $(CHEWOUT_FILES) *.ref
+
+$(lpfx)ctype_.$(oext): ctype_.c ctype_iso.h ctype_cp.h
Index: libc/ctype/_tolower.c
===================================================================
RCS file: libc/ctype/_tolower.c
diff -N libc/ctype/_tolower.c
--- libc/ctype/_tolower.c 17 Feb 2000 19:39:46 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
-#include <_ansi.h>
-#include <ctype.h>
-
-#undef _tolower
-int
-_DEFUN(_tolower,(c),int c)
-{
- return isupper(c) ? (c) - 'A' + 'a' : c;
-}
Index: libc/ctype/_toupper.c
===================================================================
RCS file: libc/ctype/_toupper.c
diff -N libc/ctype/_toupper.c
--- libc/ctype/_toupper.c 17 Feb 2000 19:39:46 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
-#include <_ansi.h>
-#include <ctype.h>
-
-#undef _toupper
-int
-_DEFUN(_toupper,(c),int c)
-{
- return islower(c) ? c - 'a' + 'A' : c;
-}
Index: libc/ctype/ctype_.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/ctype_.c,v
retrieving revision 1.6
diff -u -p -r1.6 ctype_.c
--- libc/ctype/ctype_.c 26 Mar 2009 09:45:11 -0000 1.6
+++ libc/ctype/ctype_.c 30 Mar 2009 13:16:29 -0000
@@ -73,58 +73,106 @@ static char sccsid[] = "@(#)ctype_.c 5.6
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0
-#if defined(__GNUC__) && !defined(__CHAR_UNSIGNED__) && !defined(COMPACT_CTYPE)
+#if (defined(__GNUC__) && !defined(__CHAR_UNSIGNED__) && !defined(COMPACT_CTYPE)) || defined (__CYGWIN__)
#define ALLOW_NEGATIVE_CTYPE_INDEX
#endif
#if defined(ALLOW_NEGATIVE_CTYPE_INDEX)
-static _CONST char _ctype_b[128 + 256] = {
+/* No static const on Cygwin since it's referenced and potentially overwritten
+ for compatibility with older applications. */
+#ifndef __CYGWIN__
+static _CONST
+#endif
+char _ctype_b[128 + 256] = {
_CTYPE_DATA_128_256,
_CTYPE_DATA_0_127,
_CTYPE_DATA_128_256
};
-# if defined(__CYGWIN__)
-_CONST char __declspec(dllexport) *__ctype_ptr = _ctype_b + 128;
-_CONST char __declspec(dllexport) *__ctype_ptr__ = _ctype_b + 127;
-# else
-_CONST char *__ctype_ptr = _ctype_b + 128;
-_CONST char *__ctype_ptr__ = _ctype_b + 127;
-# endif
-
-# if defined(_HAVE_ARRAY_ALIASING)
-
-# if defined(__CYGWIN__)
-extern _CONST char __declspec(dllexport) _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
-# else
+#if defined(_MB_CAPABLE)
+#if defined(_MB_EXTENDED_CHARSETS_ISO)
+#include "ctype_iso.h"
+#endif
+#if defined(_MB_EXTENDED_CHARSETS_WINDOWS)
+#include "ctype_cp.h"
+#endif
+#endif
+
+#ifdef __CYGWIN__
+char __declspec(dllexport) *__ctype_ptr__ = _ctype_b + 127;
+#else
+char *__ctype_ptr__ = _ctype_b + 127;
+#endif
+
+# ifdef __CYGWIN__
+
+__asm__ (" \n\
+ .data \n\
+ .globl __ctype_ \n\
+ .set __ctype_,__ctype_b+127 \n\
+ .text \n\
+");
+
+# elif defined(_HAVE_ARRAY_ALIASING)
+
extern _CONST char _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
-# endif
# else /* !_HAVE_ARRAY_ALIASING */
-# if defined(__CYGWIN__)
-_CONST char __declspec(dllexport) _ctype_[1 + 256] = {
-# else
_CONST char _ctype_[1 + 256] = {
-# endif
0,
_CTYPE_DATA_0_127,
_CTYPE_DATA_128_256
};
-# endif /* !_HAVE_ARRAY_ALIASING */
+# endif /* !_HAVE_ARRAY_ALIASING */
#else /* !defined(ALLOW_NEGATIVE_CTYPE_INDEX) */
-# if defined(__CYGWIN__)
-_CONST char __declspec(dllexport) _ctype_[1 + 256] = {
-# else
_CONST char _ctype_[1 + 256] = {
-# endif
0,
_CTYPE_DATA_0_127,
_CTYPE_DATA_128_256
};
-_CONST char *__ctype_ptr = _ctype_ + 1;
_CONST char *__ctype_ptr__ = _ctype_;
#endif
+
+#if defined(_MB_CAPABLE)
+/* Cygwin has its own implementation which additionally maintains backward
+ compatibility with applications built under older Cygwin releases. */
+#ifndef __CYGWIN__
+void
+__set_ctype (const char *charset)
+{
+ int idx;
+
+ switch (*charset)
+ {
+#if defined(_MB_EXTENDED_CHARSETS_ISO)
+ case 'I':
+ idx = __iso_8859_index (charset + 9);
+ /* The ctype table has a leading ISO-8859-1 element so we have to add
+ 1 to the index returned by __iso_8859_index. If __iso_8859_index
+ returns < 0, it's ISO-8859-1. */
+ if (idx < 0)
+ idx = 0;
+ else
+ ++idx;
+ __ctype_ptr__ = (char *) (__ctype_iso[idx] + 127);
+ return;
+#endif
+#if defined(_MB_EXTENDED_CHARSETS_WINDOWS)
+ case 'C':
+ idx = __cp_index (charset + 2);
+ if (idx < 0)
+ break;
+ __ctype_ptr__ = (char *) (__ctype_cp[idx] + 127);
+ return;
+ default:
+ break;
+ }
+#endif
+ __ctype_ptr__ = (char *) _ctype_b + 127;
+}
+#endif /* !__CYGWIN__ */
+#endif /* _MB_CAPABLE */
Index: libc/ctype/ctype_cp.h
===================================================================
RCS file: libc/ctype/ctype_cp.h
diff -N libc/ctype/ctype_cp.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libc/ctype/ctype_cp.h 30 Mar 2009 13:16:29 -0000
@@ -0,0 +1,570 @@
+/* ctype table definitions for Windows codepage charsets.
+ Included by ctype_.c. */
+
+#define _CTYPE_CP437_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _U, _U, \
+ _U, _L, _U, _L, _L, _L, _L, _L, \
+ _L, _U, _U, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _U, _L, _U, _L, _P, _L, \
+ _U, _U, _U, _L, _P, _L, _L, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP720_128_256 \
+ 0, 0, _L, _L, 0, _L, 0, _L, \
+ _L, _L, _L, _L, _L, 0, 0, 0, \
+ 0, _P, _P, _L, _P, _P, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ 0, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP737_128_256 \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _U, _U, _U, _U, _U, _U, \
+ _U, _P, _P, _P, _P, _U, _U, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP775_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _U, _L, _L, _U, _U, _U, \
+ _U, _L, _U, _L, _L, _U, _P, _U, \
+ _L, _U, _U, _P, _P, _P, _P, _P, \
+ _U, _U, _L, _U, _L, _L, _P, _P, \
+ _P, _P, _P, _P, _P, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _U, _U, _U, \
+ _U, _P, _P, _P, _P, _U, _U, _P, \
+ _P, _P, _P, _P, _P, _P, _U, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _L, _U, _U, _L, _U, _L, _L, \
+ _U, _L, _U, _L, _L, _U, _U, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP850_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _U, _U, \
+ _U, _L, _U, _L, _L, _L, _L, _L, \
+ _L, _U, _U, _L, _P, _U, _P, _P, \
+ _L, _L, _L, _L, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _U, _U, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _L, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _U, _U, _U, _U, _L, _U, _U, \
+ _U, _P, _P, _P, _P, _P, _U, _P, \
+ _U, _L, _U, _U, _L, _U, _L, _U, \
+ _L, _U, _U, _U, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP852_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _U, _L, _L, _U, _U, _U, \
+ _U, _U, _L, _L, _L, _U, _L, _U, \
+ _L, _U, _U, _U, _L, _U, _P, _L, \
+ _L, _L, _L, _L, _U, _L, _U, _L, \
+ _U, _L, _P, _L, _U, _L, _P, _P, \
+ _P, _P, _P, _P, _P, _U, _U, _U, \
+ _U, _P, _P, _P, _P, _U, _L, _P, \
+ _P, _P, _P, _P, _P, _P, _U, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _U, _U, _U, _L, _U, _U, _U, \
+ _L, _P, _P, _P, _P, _U, _U, _P, \
+ _U, _L, _U, _U, _L, _L, _U, _L, \
+ _U, _U, _L, _U, _L, _U, _L, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _L, _U, _L, _P, _S|_B
+#define _CTYPE_CP855_128_256 \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _U, _L, _U, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _L, _U, _L, \
+ _U, _P, _P, _P, _P, _L, _U, _P, \
+ _P, _P, _P, _P, _P, _P, _L, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _U, _L, _U, _L, _U, _L, _U, \
+ _L, _P, _P, _P, _P, _U, _L, _P, \
+ _U, _L, _U, _L, _U, _L, _U, _L, \
+ _U, _L, _U, _L, _U, _L, _U, _P, \
+ _P, _L, _U, _L, _U, _L, _U, _L, \
+ _U, _L, _U, _L, _U, _P, _P, _S|_B
+#define _CTYPE_CP857_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _U, _U, \
+ _U, _L, _U, _L, _L, _L, _L, _L, \
+ _U, _U, _U, _L, _P, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _U, _U, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _U, _U, _U, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _L, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _U, _U, _U, _L, _U, _U, \
+ _U, _P, _P, _P, _P, _P, _U, _P, \
+ _U, _L, _U, _U, _L, _U, _L, _L, \
+ _P, _U, _U, _U, _L, _L, _P, _P, \
+ _P, _P, _L, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP858_128_256 \
+ _U, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _U, _U, \
+ _U, _L, _U, _L, _L, _L, _L, _L, \
+ _L, _U, _U, _L, _P, _U, _P, _P, \
+ _L, _L, _L, _L, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _U, _U, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _L, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _U, _U, _U, _U, _P, _U, _U, \
+ _U, _P, _P, _P, _P, _P, _U, _P, \
+ _U, _L, _U, _U, _L, _U, _L, _U, \
+ _L, _U, _U, _U, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP862_128_256 \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _U, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _U, _L, _U, _L, _P, _L, \
+ _U, _U, _U, _L, _P, _L, _L, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP866_128_256 \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _U, _L, _U, _L, _U, _L, _U, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP874_128_256 \
+ _P, 0, 0, 0, 0, _P, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ _S|_B, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, 0, 0, 0, 0, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _L, _L, 0, 0, 0, 0
+#define _CTYPE_CP1125_128_256 \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _U, _L, _U, _L, _U, _L, _U, _L, \
+ _U, _L, _P, _P, _P, _P, _P, _S|_B
+#define _CTYPE_CP1250_128_256 \
+ _P, 0, _P, 0, _P, _P, _P, _P, \
+ 0, _P, _U, _P, _U, _U, _U, _U, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ 0, _P, _L, _P, _L, _L, _L, _L, \
+ _S|_B, _P, _P, _U, _P, _U, _P, _P, \
+ _P, _P, _U, _P, _P, _P, _P, _U, \
+ _P, _P, _P, _L, _P, _P, _P, _P, \
+ _P, _L, _L, _P, _U, _P, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _P
+#define _CTYPE_CP1251_128_256 \
+ _U, _U, _P, _L, _P, _P, _P, _P, \
+ _P, _P, _U, _P, _U, _U, _U, _U, \
+ _L, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _P, _L, _L, _L, _L, _P, _U, \
+ _S|_B, _U, _L, _U, _P, _U, _P, _P, \
+ _U, _P, _U, _P, _P, _P, _P, _U, \
+ _P, _P, _U, _L, _L, _P, _P, _P, \
+ _L, _P, _L, _P, _L, _U, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_CP1252_128_256 \
+ _P, 0, _P, _L, _P, _P, _P, _P, \
+ _P, _P, _U, _P, _U, _U, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _L, _P, _L, 0, _L, _U, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_CP1253_128_256 \
+ _P, 0, _P, _L, _P, _P, _P, _P, \
+ 0, _P, 0, _P, 0, 0, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ 0, _P, _P, 0, 0, 0, 0, 0, \
+ _S|_B, _P, _U, _P, _P, _P, _P, _P, \
+ _P, _P, 0, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _P, _U, _P, _U, _U, \
+ _L, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_CP1254_128_256 \
+ _P, 0, _P, _L, _P, _P, _P, _P, \
+ _P, _P, _U, _P, _U, 0, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _L, _P, _L, 0, 0, _U, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_CP1255_128_256 \
+ _P, 0, _P, _L, _P, _P, _P, _P, \
+ _P, _P, 0, _P, 0, 0, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, 0, _P, 0, 0, 0, 0, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, 0, 0, 0, 0, 0, 0, 0, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, 0, 0, _P, _P, 0
+#define _CTYPE_CP1256_128_256 \
+ _P, _L, _P, _L, _P, _P, _P, _P, \
+ _P, _P, _L, _P, _U, _L, _L, _L, \
+ _L, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _P, _L, _P, _L, _P, _P, _L, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _L, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _P, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _P, _P, _P, _L, _P, _P, _P, \
+ _P, _L, _P, _L, _L, _P, _P, _L
+#define _CTYPE_CP1257_128_256 \
+ _P, 0, _P, 0, _P, _P, _P, _P, \
+ 0, _P, 0, _P, 0, _P, _P, _P, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ 0, _P, 0, _P, 0, _P, _P, 0, \
+ _S|_B, 0, _P, _P, _P, 0, _P, _P, \
+ _U, _P, _U, _P, _P, _P, _P, _U, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _L, _P, _L, _P, _P, _P, _P, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _P
+#define _CTYPE_CP1258_128_256 \
+ _P, 0, _P, _L, _P, _P, _P, _P, \
+ _P, _P, 0, _P, _U, 0, 0, 0, \
+ 0, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, 0, _P, _L, 0, 0, _U, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _P, _U, _U, _U, \
+ _U, _U, _P, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _P, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _P, _L, _L, _L, \
+ _L, _L, _P, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _P, _L
+
+extern int __cp_index (const char *charset_ext);
+
+#if defined(ALLOW_NEGATIVE_CTYPE_INDEX)
+
+#ifndef __CYGWIN__
+static _CONST
+#endif
+char __ctype_cp[22][128 + 256] = {
+ { _CTYPE_CP437_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP437_128_256
+ },
+ { _CTYPE_CP720_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP720_128_256
+ },
+ { _CTYPE_CP737_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP737_128_256
+ },
+ { _CTYPE_CP775_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP775_128_256
+ },
+ { _CTYPE_CP850_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP850_128_256
+ },
+ { _CTYPE_CP852_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP852_128_256
+ },
+ { _CTYPE_CP855_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP855_128_256
+ },
+ { _CTYPE_CP857_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP857_128_256
+ },
+ { _CTYPE_CP858_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP858_128_256
+ },
+ { _CTYPE_CP862_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP862_128_256
+ },
+ { _CTYPE_CP866_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP866_128_256
+ },
+ { _CTYPE_CP874_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP874_128_256
+ },
+ { _CTYPE_CP1125_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1125_128_256
+ },
+ { _CTYPE_CP1250_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1250_128_256
+ },
+ { _CTYPE_CP1251_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1251_128_256
+ },
+ { _CTYPE_CP1252_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1252_128_256
+ },
+ { _CTYPE_CP1253_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1253_128_256
+ },
+ { _CTYPE_CP1254_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1254_128_256
+ },
+ { _CTYPE_CP1255_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1255_128_256
+ },
+ { _CTYPE_CP1256_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1256_128_256
+ },
+ { _CTYPE_CP1257_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1257_128_256
+ },
+ { _CTYPE_CP1258_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1258_128_256
+ },
+};
+
+#else /* !defined(ALLOW_NEGATIVE_CTYPE_INDEX) */
+
+static _CONST char __ctype_cp[22][1 + 256] = {
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP437_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP720_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP737_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP775_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP850_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP852_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP855_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP857_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP858_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP862_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP866_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP874_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1125_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1250_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1251_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1252_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1253_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1254_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1255_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1256_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1257_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_CP1258_128_256
+ },
+};
+
+#endif /* ALLOW_NEGATIVE_CTYPE_INDEX */
Index: libc/ctype/ctype_iso.h
===================================================================
RCS file: libc/ctype/ctype_iso.h
diff -N libc/ctype/ctype_iso.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libc/ctype/ctype_iso.h 30 Mar 2009 13:16:29 -0000
@@ -0,0 +1,395 @@
+/* ctype table definitions for ISO-8859-x charsets.
+ Included by ctype_.c. */
+
+#define _CTYPE_ISO_8859_1_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_2_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _P, _U, _P, _U, _U, _P, \
+ _P, _U, _U, _U, _U, _P, _U, _U, \
+ _P, _L, _P, _L, _P, _L, _L, _P, \
+ _P, _L, _L, _L, _L, _P, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_3_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _P, _P, _P, 0, _U, _P, \
+ _P, _U, _U, _U, _U, _P, 0, _U, \
+ _P, _L, _P, _P, _P, _L, _L, _P, \
+ _P, _L, _L, _L, _L, _P, 0, _L, \
+ _U, _U, _U, 0, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ 0, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, 0, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ 0, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _P
+#define _CTYPE_ISO_8859_4_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _L, _U, _P, _U, _U, _P, \
+ _P, _U, _U, _U, _U, _P, _U, _P, \
+ _P, _L, _P, _L, _P, _L, _L, _P, \
+ _P, _L, _L, _L, _L, _P, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_5_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _P, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _P, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _P, _L, _L
+#define _CTYPE_ISO_8859_6_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, 0, 0, 0, _P, 0, 0, 0, \
+ 0, 0, 0, 0, _P, _P, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, _P, 0, 0, 0, _P, \
+ 0, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ 0, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, 0, 0, 0, 0, 0, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _P, _P, _P, _P, _P, \
+ _P, _P, _P, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define _CTYPE_ISO_8859_7_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _U, _P, \
+ _U, _U, _U, _P, _U, _P, _U, _U, \
+ _L, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P
+#define _CTYPE_ISO_8859_8_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, 0, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, 0, 0, _P, _P, 0
+#define _CTYPE_ISO_8859_9_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_10_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _P, _U, _U, \
+ _P, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _P, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_11_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _P, _L, _L, _P, _P, _P, _P, \
+ _P, _P, _P, 0, 0, 0, 0, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, 0, 0, 0, 0
+#define _CTYPE_ISO_8859_13_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _U, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _L, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _P
+#define _CTYPE_ISO_8859_14_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _L, _P, _U, _L, _U, _P, \
+ _U, _P, _U, _L, _U, _P, _P, _U, \
+ _U, _L, _U, _L, _U, _L, _P, _U, \
+ _L, _L, _L, _U, _L, _U, _L, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_15_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _P, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _P, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+#define _CTYPE_ISO_8859_16_128_256 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _U, _L, _U, _P, _P, _U, _P, \
+ _L, _P, _U, _P, _U, _P, _L, _U, \
+ _P, _P, _U, _U, _U, _P, _P, _P, \
+ _L, _L, _L, _P, _U, _L, _U, _L, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L
+
+extern int __iso_8859_index (const char *charset_ext);
+
+#if defined(ALLOW_NEGATIVE_CTYPE_INDEX)
+
+#ifndef __CYGWIN__
+static _CONST
+#endif
+char __ctype_iso[15][128 + 256] = {
+ { _CTYPE_ISO_8859_1_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_1_128_256
+ },
+ { _CTYPE_ISO_8859_2_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_2_128_256
+ },
+ { _CTYPE_ISO_8859_3_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_3_128_256
+ },
+ { _CTYPE_ISO_8859_4_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_4_128_256
+ },
+ { _CTYPE_ISO_8859_5_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_5_128_256
+ },
+ { _CTYPE_ISO_8859_6_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_6_128_256
+ },
+ { _CTYPE_ISO_8859_7_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_7_128_256
+ },
+ { _CTYPE_ISO_8859_8_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_8_128_256
+ },
+ { _CTYPE_ISO_8859_9_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_9_128_256
+ },
+ { _CTYPE_ISO_8859_10_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_10_128_256
+ },
+ { _CTYPE_ISO_8859_11_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_11_128_256
+ },
+ { _CTYPE_ISO_8859_13_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_13_128_256
+ },
+ { _CTYPE_ISO_8859_14_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_14_128_256
+ },
+ { _CTYPE_ISO_8859_15_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_15_128_256
+ },
+ { _CTYPE_ISO_8859_16_128_256,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_16_128_256
+ },
+};
+
+#else /* !defined(ALLOW_NEGATIVE_CTYPE_INDEX) */
+
+static _CONST char __ctype_iso[15][1 + 256] = {
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_1_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_2_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_3_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_4_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_5_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_6_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_7_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_8_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_9_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_10_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_11_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_13_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_14_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_15_128_256
+ },
+ { 0,
+ _CTYPE_DATA_0_127,
+ _CTYPE_ISO_8859_16_128_256
+ },
+};
+
+#endif /* ALLOW_NEGATIVE_CTYPE_INDEX */
Index: libc/ctype/tolower.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/tolower.c,v
retrieving revision 1.2
diff -u -p -r1.2 tolower.c
--- libc/ctype/tolower.c 28 Oct 2005 21:33:22 -0000 1.2
+++ libc/ctype/tolower.c 30 Mar 2009 13:16:29 -0000
@@ -46,10 +46,31 @@ No supporting OS subroutines are require
#include <_ansi.h>
#include <ctype.h>
+#ifdef _MB_CAPABLE
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wctype.h>
+#include <wchar.h>
+#endif
#undef tolower
int
_DEFUN(tolower,(c),int c)
{
- return isupper(c) ? (c) - 'A' + 'a' : c;
+#ifdef _MB_CAPABLE
+ if ((unsigned char) c <= 0x7f)
+ return isupper (c) ? c - 'A' + 'a' : c;
+ else if (c != EOF && MB_CUR_MAX == 1 && isupper (c))
+ {
+ char s[MB_LEN_MAX] = { c, '\0' };
+ wchar_t wc;
+ if (mbtowc (&wc, s, 1) >= 0
+ && wctomb (s, (wchar_t) towlower ((wint_t) wc)) == 1)
+ c = s[0];
+ }
+ return c;
+#else
+ return isupper(c) ? (c) - 'A' + 'a' : c;
+#endif
}
Index: libc/ctype/toupper.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/toupper.c,v
retrieving revision 1.2
diff -u -p -r1.2 toupper.c
--- libc/ctype/toupper.c 28 Oct 2005 21:33:22 -0000 1.2
+++ libc/ctype/toupper.c 30 Mar 2009 13:16:29 -0000
@@ -45,10 +45,31 @@ No supporting OS subroutines are require
#include <_ansi.h>
#include <ctype.h>
+#ifdef _MB_CAPABLE
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wctype.h>
+#include <wchar.h>
+#endif
#undef toupper
int
_DEFUN(toupper,(c),int c)
{
- return islower(c) ? c - 'a' + 'A' : c;
+#ifdef _MB_CAPABLE
+ if ((unsigned char) c <= 0x7f)
+ return islower (c) ? c - 'a' + 'A' : c;
+ else if (c != EOF && MB_CUR_MAX == 1 && islower (c))
+ {
+ char s[MB_LEN_MAX] = { c, '\0' };
+ wchar_t wc;
+ if (mbtowc (&wc, s, 1) >= 0
+ && wctomb (s, (wchar_t) towupper ((wint_t) wc)) == 1)
+ c = s[0];
+ }
+ return c;
+#else
+ return islower (c) ? c - 'a' + 'A' : c;
+#endif
}
Index: libc/include/ctype.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/ctype.h,v
retrieving revision 1.14
diff -u -p -r1.14 ctype.h
--- libc/include/ctype.h 26 Mar 2009 09:45:11 -0000 1.14
+++ libc/include/ctype.h 30 Mar 2009 13:16:29 -0000
@@ -26,8 +26,8 @@ int _EXFUN(isblank, (int __c));
#ifndef __STRICT_ANSI__
int _EXFUN(isascii, (int __c));
int _EXFUN(toascii, (int __c));
-int _EXFUN(_tolower, (int __c));
-int _EXFUN(_toupper, (int __c));
+#define _tolower(c) ((unsigned char)(c) - 'A' + 'a')
+#define _toupper(c) ((unsigned char)(c) - 'a' + 'A')
#endif
#define _U 01
@@ -39,7 +39,7 @@ int _EXFUN(_toupper, (int __c));
#define _X 0100
#define _B 0200
-extern __IMPORT _CONST char *__ctype_ptr__;
+extern __IMPORT char *__ctype_ptr__;
#ifndef __cplusplus
#define isalpha(c) ((__ctype_ptr__)[(unsigned)((c)+1)]&(_U|_L))
@@ -60,8 +60,9 @@ extern __IMPORT _CONST char *__ctype_ptr
/* Non-gcc versions will get the library versions, and will be
- slightly slower */
-#ifdef __GNUC__
+ slightly slower. These macros are not NLS-aware so they are
+ disabled if the system is multibyte capable. */
+#if defined(__GNUC__) && !defined(_MB_CAPABLE)
# define toupper(c) \
__extension__ ({ int __x = (c); islower(__x) ? (__x - 'a' + 'A') : __x;})
# define tolower(c) \
Index: libc/locale/locale.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/locale/locale.c,v
retrieving revision 1.16
diff -u -p -r1.16 locale.c
--- libc/locale/locale.c 26 Mar 2009 10:24:38 -0000 1.16
+++ libc/locale/locale.c 30 Mar 2009 13:16:29 -0000
@@ -377,9 +377,10 @@ currentlocale()
#ifdef _MB_CAPABLE
#ifdef __CYGWIN__
extern void *__set_charset_from_codepage (unsigned int, char *charset);
-extern void __set_ctype (const char *charset);
#endif /* __CYGWIN__ */
+extern void __set_ctype (const char *charset);
+
static char *
loadlocale(struct _reent *p, int category)
{
@@ -604,10 +605,8 @@ loadlocale(struct _reent *p, int categor
#ifdef _MB_CAPABLE
__wctomb = l_wctomb;
__mbtowc = l_mbtowc;
-#ifdef __CYGWIN__
__set_ctype (charset);
#endif
-#endif
}
else if (category == LC_MESSAGES)
strcpy (lc_message_charset, charset);
--
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat