aboutsummaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-07-29 03:49:00 +0000
committerRoland McGrath <roland@gnu.org>1996-07-29 03:49:00 +0000
commitce7a5ef4bc04ee3ca9d2f42377ca6593d8492a52 (patch)
treeefbd26a9837de025fc405475655d24d83761cfee /locale
parentcddcfecfd1a8f91ee1da1c0147a4f07aee1846a0 (diff)
downloadglibc-ce7a5ef4bc04ee3ca9d2f42377ca6593d8492a52.zip
glibc-ce7a5ef4bc04ee3ca9d2f42377ca6593d8492a52.tar.gz
glibc-ce7a5ef4bc04ee3ca9d2f42377ca6593d8492a52.tar.bz2
Sun Jul 28 23:46:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c (strftime: do_number): Initialize PRINTED to MAXDIGITS in case P is null and so sprintf is never actually called. Mon Jul 29 02:46:23 1996 Ulrich Drepper <drepper@cygnus.com> Add support for the to-be-written internationalized regexp. This code must be able to use collation symbols and collation equivalent classes. * locale/C-collate.c (_nl_C_LC_COLLATE_symbol_hash, _nl_C_LC_COLLATE_symbol_strings, _nl_C_LC_COLLATE_symbol_classes): New global variables for collation classes. * locale/categories.def: Add new descriptions for collation symbols and collation classes. * locale/langinfo.h: Add constants for collation symbols and collation classes. * locale/lc-collate.c: Add new global variables for collation symbols and collation classes. (_nl_postload_collate): Initialize new variables. * locale/programs/ld-collate.c: Add code to emit tables for collation symbols and collation classes. * locale/programs/locales.h: Change prototype for `collate_output'. * locale/programs/locfile.c (write_all_categories): Call `collate_output' with new argument. * locale/localeinfo.h: Add declaration for new global vars. (union locale_data_value): New member wstr for `wchar_t' strings. * locale/programs/locale-spec.c: Handle `collate-classes' keyword and print information about available collation classes. * locale/strlen-hash.h: New file. Simple hashing function which takes a string with known length. * locale/Makefile (distribute): Add strlen-hash.h. (locale-modules): New var. Additional files for `locale' program. * locale/C-ctype.c: Rewrite to avoid using string for giving values which are of type `u_int32_t'. Correct entry for EOF in toupper and tolower tables. * locale/loadlocale.c (_nl_load_locale): Add cast to prevent warning. * locale/programs/ld-ctype.c (ctype_output): Add code to make sure that all tables in binary file are words aligned. * locale/programs/locfile.c (write_locale_data): Correct handling of LC_MESSAGES locale. Create directory if necessary. * locale/setlocale.c (setlocale): Add cast to avoid warning. * string/string.h: Add prototype for `__strndup'. Wed Jul 24 19:10:00 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * wcsmbs/mbrtowc.c: Remove unused variable. Sun Jul 28 22:40:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): Update to 2.0.10; some problems were reported with an earlier version, and this one is known to work. * sysdeps/generic/dl-sysdep.c (__libc_enable_secure): New variable. * sysdeps/mach/hurd/dl-sysdep.c: Likewise.
Diffstat (limited to 'locale')
-rw-r--r--locale/C-collate.c155
-rw-r--r--locale/C-ctype.c876
-rw-r--r--locale/Makefile2
-rw-r--r--locale/categories.def57
-rw-r--r--locale/langinfo.h14
-rw-r--r--locale/lc-collate.c28
-rw-r--r--locale/loadlocale.c2
-rw-r--r--locale/localeinfo.h7
-rw-r--r--locale/programs/ld-collate.c402
-rw-r--r--locale/programs/ld-ctype.c33
-rw-r--r--locale/programs/locale-spec.c33
-rw-r--r--locale/programs/locales.h3
-rw-r--r--locale/programs/locfile.c33
-rw-r--r--locale/setlocale.c2
-rw-r--r--locale/strlen-hash.h51
15 files changed, 921 insertions, 777 deletions
diff --git a/locale/C-collate.c b/locale/C-collate.c
index 9535d4f..08fb47b 100644
--- a/locale/C-collate.c
+++ b/locale/C-collate.c
@@ -17,14 +17,165 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <endian.h>
#include "localeinfo.h"
+
+const u_int32_t _nl_C_LC_COLLATE_symbol_hash[446] =
+{
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x00000154u, 0x00000060u, 0xffffffffu, 0xffffffffu,
+ 0x0000004fu, 0x0000001au, 0x00000085u, 0x00000030u, 0xffffffffu, 0xffffffffu,
+ 0x000002beu, 0x000000fau, 0xffffffffu, 0xffffffffu, 0x0000014eu, 0x0000005eu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000bbu, 0x00000044u,
+ 0xffffffffu, 0xffffffffu, 0x000000efu, 0x0000004cu, 0x00000147u, 0x0000005cu,
+ 0x000000a0u, 0x0000003eu, 0x00000000u, 0x00000000u, 0x00000038u, 0x00000016u,
+ 0x00000094u, 0x00000038u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x00000140u, 0x0000005au, 0x0000018cu, 0x00000076u,
+ 0x0000007du, 0x0000002cu, 0xffffffffu, 0xffffffffu, 0x00000115u, 0x00000052u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000285u, 0x000000deu,
+ 0x00000171u, 0x0000006cu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0x00000289u, 0x000000e2u, 0x000002d8u, 0x000000feu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000022u, 0x00000010u,
+ 0x0000028fu, 0x000000e8u, 0x00000069u, 0x00000022u, 0x0000006du, 0x00000024u,
+ 0x00000071u, 0x00000026u, 0x00000075u, 0x00000028u, 0xffffffffu, 0xffffffffu,
+ 0x00000295u, 0x000000eeu, 0xffffffffu, 0xffffffffu, 0x00000297u, 0x000000f0u,
+ 0xffffffffu, 0xffffffffu, 0x00000299u, 0x000000f2u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000213u, 0x000000b6u,
+ 0xffffffffu, 0xffffffffu, 0x00000014u, 0x0000000au, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x00000227u, 0x000000b8u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x0000015du, 0x00000064u,
+ 0xffffffffu, 0xffffffffu, 0x000001ffu, 0x000000a2u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x0000013au, 0x00000058u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000010u, 0x00000008u,
+ 0x000001dfu, 0x00000082u, 0x000001e1u, 0x00000084u, 0x00000167u, 0x00000068u,
+ 0x00000004u, 0x00000002u, 0x000001e7u, 0x0000008au, 0x00000186u, 0x00000074u,
+ 0x000001ebu, 0x0000008eu, 0x000001edu, 0x00000090u, 0x000001efu, 0x00000092u,
+ 0x000001f1u, 0x00000094u, 0x000001f3u, 0x00000096u, 0x000001f5u, 0x00000098u,
+ 0x000001f7u, 0x0000009au, 0x000001f9u, 0x0000009cu, 0x000001a5u, 0x0000007au,
+ 0x000001fdu, 0x000000a0u, 0x00000030u, 0x00000014u, 0x00000201u, 0x000000a4u,
+ 0x00000203u, 0x000000a6u, 0x00000205u, 0x000000a8u, 0x00000207u, 0x000000aau,
+ 0x00000209u, 0x000000acu, 0x0000020bu, 0x000000aeu, 0x0000020du, 0x000000b0u,
+ 0x0000020fu, 0x000000b2u, 0x00000211u, 0x000000b4u, 0xffffffffu, 0xffffffffu,
+ 0x0000009cu, 0x0000003cu, 0xffffffffu, 0xffffffffu, 0x00000098u, 0x0000003au,
+ 0x0000016cu, 0x0000006au, 0xffffffffu, 0xffffffffu, 0x00000269u, 0x000000c2u,
+ 0x0000026bu, 0x000000c4u, 0x0000026du, 0x000000c6u, 0x0000026fu, 0x000000c8u,
+ 0x00000271u, 0x000000cau, 0x00000273u, 0x000000ccu, 0x00000275u, 0x000000ceu,
+ 0x00000277u, 0x000000d0u, 0x00000279u, 0x000000d2u, 0x0000027bu, 0x000000d4u,
+ 0x0000027du, 0x000000d6u, 0x0000027fu, 0x000000d8u, 0x00000281u, 0x000000dau,
+ 0x00000283u, 0x000000dcu, 0x00000090u, 0x00000036u, 0x00000287u, 0x000000e0u,
+ 0x0000005fu, 0x0000001cu, 0x0000028bu, 0x000000e4u, 0x0000028du, 0x000000e6u,
+ 0x00000089u, 0x00000032u, 0x000001c3u, 0x0000007eu, 0x00000293u, 0x000000ecu,
+ 0x00000062u, 0x0000001eu, 0x000001b1u, 0x0000007cu, 0x00000130u, 0x00000056u,
+ 0x0000029bu, 0x000000f4u, 0x00000196u, 0x00000078u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x00000081u, 0x0000002eu, 0x00000251u, 0x000000beu,
+ 0x00000079u, 0x0000002au, 0x0000029du, 0x000000f6u, 0xffffffffu, 0xffffffffu,
+ 0x0000025cu, 0x000000c0u, 0xffffffffu, 0xffffffffu, 0x0000002cu, 0x00000012u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000a4u, 0x00000040u,
+ 0xffffffffu, 0xffffffffu, 0x000002b0u, 0x000000f8u, 0xffffffffu, 0xffffffffu,
+ 0x000000f9u, 0x0000004eu, 0xffffffffu, 0xffffffffu, 0x0000001cu, 0x0000000eu,
+ 0xffffffffu, 0xffffffffu, 0x0000017bu, 0x00000070u, 0x0000000cu, 0x00000006u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000001e3u, 0x00000086u,
+ 0xffffffffu, 0xffffffffu, 0x000001e5u, 0x00000088u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x000001d1u, 0x00000080u, 0x000001e9u, 0x0000008cu,
+ 0x0000008cu, 0x00000034u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0x00000291u, 0x000000eau, 0xffffffffu, 0xffffffffu,
+ 0x00000008u, 0x00000004u, 0xffffffffu, 0xffffffffu, 0x00000181u, 0x00000072u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000231u, 0x000000bau,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000cau, 0x00000046u,
+ 0x00000246u, 0x000000bcu, 0xffffffffu, 0xffffffffu, 0x000001fbu, 0x0000009eu,
+ 0x000000d6u, 0x00000048u, 0x00000018u, 0x0000000cu, 0xffffffffu, 0xffffffffu,
+ 0x00000159u, 0x00000062u, 0xffffffffu, 0xffffffffu, 0x000000aau, 0x00000042u,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000e2u, 0x0000004au,
+ 0x00000175u, 0x0000006eu, 0xffffffffu, 0xffffffffu, 0x00000104u, 0x00000050u,
+ 0x00000065u, 0x00000020u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000002d2u, 0x000000fcu,
+ 0xffffffffu, 0xffffffffu, 0x00000161u, 0x00000066u, 0x00000045u, 0x00000018u,
+ 0xffffffffu, 0xffffffffu, 0x00000127u, 0x00000054u, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+ 0xffffffffu, 0xffffffffu
+};
+
+const char _nl_C_LC_COLLATE_symbol_strings[732] =
+ "NUL\0" "SOH\0" "STX\0" "ETX\0" "EOT\0" "ENQ\0" "ACK\0" "alert\0"
+ "backspace\0" "tab\0" "newline\0" "vertical-tab\0" "form-feed\0"
+ "carriage-return\0" "SI\0" "SO\0" "DLE\0" "DC1\0" "DC2\0" "DC3\0" "DC4\0"
+ "NAK\0" "SYN\0" "ETB\0" "CAN\0" "EM\0" "SUB\0" "ESC\0" "IS4\0" "IS3\0"
+ "IS2\0" "IS1\0" "space\0" "exclamation-mark\0" "quotation-mark\0"
+ "number-sign\0" "dollar-sign\0" "percent-sign\0" "ampersand\0"
+ "apostrophe\0" "left-parenthesis\0" "right-parenthesis\0" "asterisk\0"
+ "plus-sign\0" "comma\0" "hyphen\0" "period\0" "slash\0" "zero\0" "one\0"
+ "two\0" "three\0" "four\0" "five\0" "six\0" "seven\0" "eight\0" "nine\0"
+ "colon\0" "semicolon\0" "less-than-sign\0" "equals-sign\0"
+ "greater-than-sign\0" "question-mark\0" "commercial-at\0" "A\0" "B\0" "C\0"
+ "D\0" "E\0" "F\0" "G\0" "H\0" "I\0" "J\0" "K\0" "L\0" "M\0" "N\0" "O\0"
+ "P\0" "Q\0" "R\0" "S\0" "T\0" "U\0" "V\0" "W\0" "X\0" "Y\0" "Z\0"
+ "left-square-bracket\0" "backslash\0" "right-square-bracket\0"
+ "circumflex\0" "underscore\0" "grave-accent\0" "a\0" "b\0" "c\0" "d\0" "e\0"
+ "f\0" "g\0" "h\0" "i\0" "j\0" "k\0" "l\0" "m\0" "n\0" "o\0" "p\0" "q\0"
+ "r\0" "s\0" "t\0" "u\0" "v\0" "w\0" "x\0" "y\0" "z\0" "left-curly-bracket\0"
+ "vertical-line\0" "right-curly-bracket\0" "tilde\0" "DEL\0";
+
+const u_int32_t _nl_C_LC_COLLATE_symbol_classes[256] =
+{
+ 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7,
+ 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15,
+ 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23,
+ 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31,
+ 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39,
+ 1, 40, 1, 41, 1, 42, 1, 43, 1, 44, 1, 45, 1, 46, 1, 47,
+ 1, 48, 1, 49, 1, 50, 1, 51, 1, 52, 1, 53, 1, 54, 1, 55,
+ 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 62, 1, 63,
+ 1, 64, 1, 65, 1, 66, 1, 67, 1, 68, 1, 69, 1, 70, 1, 71,
+ 1, 72, 1, 73, 1, 74, 1, 75, 1, 76, 1, 77, 1, 78, 1, 79,
+ 1, 80, 1, 81, 1, 82, 1, 83, 1, 84, 1, 85, 1, 86, 1, 87,
+ 1, 88, 1, 89, 1, 90, 1, 91, 1, 92, 1, 93, 1, 94, 1, 95,
+ 1, 96, 1, 97, 1, 98, 1, 99, 1, 100, 1, 101, 1, 102, 1, 103,
+ 1, 104, 1, 105, 1, 106, 1, 107, 1, 108, 1, 109, 1, 110, 1, 111,
+ 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 1, 119,
+ 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127
+};
+
const struct locale_data _nl_C_LC_COLLATE =
{
_nl_C_name,
NULL, 0, /* no file mapped */
- 1,
+ 21,
{
- { word: 0 }
+ { word: 0 },
+ { string: NULL },
+ { word: 0 },
+ { word: 0 },
+ { string: NULL },
+ { string: NULL },
+ { word: 0 },
+ { string: NULL },
+ { string: NULL },
+ { word: 0 },
+ { string: NULL },
+ { string: NULL },
+ { string: NULL },
+ { string: NULL },
+ { string: NULL },
+ { word: 223 },
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ { string: NULL },
+#endif
+ { string: (const char *) _nl_C_LC_COLLATE_symbol_hash },
+#if __BYTE_ORDER == __BIG_ENDIAN
+ { string: NULL },
+#endif
+ { string: _nl_C_LC_COLLATE_symbol_strings },
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ { string: NULL },
+#endif
+ { string: (const char *) _nl_C_LC_COLLATE_symbol_classes },
+#if __BYTE_ORDER == __BIG_ENDIAN
+ { string: NULL },
+#endif
}
};
diff --git a/locale/C-ctype.c b/locale/C-ctype.c
index 89becbd..ab7e68e 100644
--- a/locale/C-ctype.c
+++ b/locale/C-ctype.c
@@ -174,724 +174,160 @@ const char _nl_C_LC_CTYPE_class32[1024] =
/* 0xfc */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000"
/* 0xff */ "\000\000\002\000"
;
-#if BYTE_ORDER == LITTLE_ENDIAN
-const char _nl_C_LC_CTYPE_toupper[1536] =
- /* 0x80 */ "\200\000\000\000" "\201\000\000\000" "\202\000\000\000"
- /* 0x83 */ "\203\000\000\000" "\204\000\000\000" "\205\000\000\000"
- /* 0x86 */ "\206\000\000\000" "\207\000\000\000" "\210\000\000\000"
- /* 0x89 */ "\211\000\000\000" "\212\000\000\000" "\213\000\000\000"
- /* 0x8c */ "\214\000\000\000" "\215\000\000\000" "\216\000\000\000"
- /* 0x8f */ "\217\000\000\000" "\220\000\000\000" "\221\000\000\000"
- /* 0x92 */ "\222\000\000\000" "\223\000\000\000" "\224\000\000\000"
- /* 0x95 */ "\225\000\000\000" "\226\000\000\000" "\227\000\000\000"
- /* 0x98 */ "\230\000\000\000" "\231\000\000\000" "\232\000\000\000"
- /* 0x9b */ "\233\000\000\000" "\234\000\000\000" "\235\000\000\000"
- /* 0x9e */ "\236\000\000\000" "\237\000\000\000" "\240\000\000\000"
- /* 0xa1 */ "\241\000\000\000" "\242\000\000\000" "\243\000\000\000"
- /* 0xa4 */ "\244\000\000\000" "\245\000\000\000" "\246\000\000\000"
- /* 0xa7 */ "\247\000\000\000" "\250\000\000\000" "\251\000\000\000"
- /* 0xaa */ "\252\000\000\000" "\253\000\000\000" "\254\000\000\000"
- /* 0xad */ "\255\000\000\000" "\256\000\000\000" "\257\000\000\000"
- /* 0xb0 */ "\260\000\000\000" "\261\000\000\000" "\262\000\000\000"
- /* 0xb3 */ "\263\000\000\000" "\264\000\000\000" "\265\000\000\000"
- /* 0xb6 */ "\266\000\000\000" "\267\000\000\000" "\270\000\000\000"
- /* 0xb9 */ "\271\000\000\000" "\272\000\000\000" "\273\000\000\000"
- /* 0xbc */ "\274\000\000\000" "\275\000\000\000" "\276\000\000\000"
- /* 0xbf */ "\277\000\000\000" "\300\000\000\000" "\301\000\000\000"
- /* 0xc2 */ "\302\000\000\000" "\303\000\000\000" "\304\000\000\000"
- /* 0xc5 */ "\305\000\000\000" "\306\000\000\000" "\307\000\000\000"
- /* 0xc8 */ "\310\000\000\000" "\311\000\000\000" "\312\000\000\000"
- /* 0xcb */ "\313\000\000\000" "\314\000\000\000" "\315\000\000\000"
- /* 0xce */ "\316\000\000\000" "\317\000\000\000" "\320\000\000\000"
- /* 0xd1 */ "\321\000\000\000" "\322\000\000\000" "\323\000\000\000"
- /* 0xd4 */ "\324\000\000\000" "\325\000\000\000" "\326\000\000\000"
- /* 0xd7 */ "\327\000\000\000" "\330\000\000\000" "\331\000\000\000"
- /* 0xda */ "\332\000\000\000" "\333\000\000\000" "\334\000\000\000"
- /* 0xdd */ "\335\000\000\000" "\336\000\000\000" "\337\000\000\000"
- /* 0xe0 */ "\340\000\000\000" "\341\000\000\000" "\342\000\000\000"
- /* 0xe3 */ "\343\000\000\000" "\344\000\000\000" "\345\000\000\000"
- /* 0xe6 */ "\346\000\000\000" "\347\000\000\000" "\350\000\000\000"
- /* 0xe9 */ "\351\000\000\000" "\352\000\000\000" "\353\000\000\000"
- /* 0xec */ "\354\000\000\000" "\355\000\000\000" "\356\000\000\000"
- /* 0xef */ "\357\000\000\000" "\360\000\000\000" "\361\000\000\000"
- /* 0xf2 */ "\362\000\000\000" "\363\000\000\000" "\364\000\000\000"
- /* 0xf5 */ "\365\000\000\000" "\366\000\000\000" "\367\000\000\000"
- /* 0xf8 */ "\370\000\000\000" "\371\000\000\000" "\372\000\000\000"
- /* 0xfb */ "\373\000\000\000" "\374\000\000\000" "\375\000\000\000"
- /* 0xfe */ "\376\000\000\000" "\377\000\000\000" "\000\000\000\000"
- /* 0x01 */ "\001\000\000\000" "\002\000\000\000" "\003\000\000\000"
- /* 0x04 */ "\004\000\000\000" "\005\000\000\000" "\006\000\000\000"
- /* 0x07 */ "\007\000\000\000" "\010\000\000\000" "\011\000\000\000"
- /* 0x0a */ "\012\000\000\000" "\013\000\000\000" "\014\000\000\000"
- /* 0x0d */ "\015\000\000\000" "\016\000\000\000" "\017\000\000\000"
- /* 0x10 */ "\020\000\000\000" "\021\000\000\000" "\022\000\000\000"
- /* 0x13 */ "\023\000\000\000" "\024\000\000\000" "\025\000\000\000"
- /* 0x16 */ "\026\000\000\000" "\027\000\000\000" "\030\000\000\000"
- /* 0x19 */ "\031\000\000\000" "\032\000\000\000" "\033\000\000\000"
- /* 0x1c */ "\034\000\000\000" "\035\000\000\000" "\036\000\000\000"
- /* 0x1f */ "\037\000\000\000" "\040\000\000\000" "\041\000\000\000"
- /* 0x22 */ "\042\000\000\000" "\043\000\000\000" "\044\000\000\000"
- /* 0x25 */ "\045\000\000\000" "\046\000\000\000" "\047\000\000\000"
- /* 0x28 */ "\050\000\000\000" "\051\000\000\000" "\052\000\000\000"
- /* 0x2b */ "\053\000\000\000" "\054\000\000\000" "\055\000\000\000"
- /* 0x2e */ "\056\000\000\000" "\057\000\000\000" "\060\000\000\000"
- /* 0x31 */ "\061\000\000\000" "\062\000\000\000" "\063\000\000\000"
- /* 0x34 */ "\064\000\000\000" "\065\000\000\000" "\066\000\000\000"
- /* 0x37 */ "\067\000\000\000" "\070\000\000\000" "\071\000\000\000"
- /* 0x3a */ "\072\000\000\000" "\073\000\000\000" "\074\000\000\000"
- /* 0x3d */ "\075\000\000\000" "\076\000\000\000" "\077\000\000\000"
- /* 0x40 */ "\100\000\000\000" "\101\000\000\000" "\102\000\000\000"
- /* 0x43 */ "\103\000\000\000" "\104\000\000\000" "\105\000\000\000"
- /* 0x46 */ "\106\000\000\000" "\107\000\000\000" "\110\000\000\000"
- /* 0x49 */ "\111\000\000\000" "\112\000\000\000" "\113\000\000\000"
- /* 0x4c */ "\114\000\000\000" "\115\000\000\000" "\116\000\000\000"
- /* 0x4f */ "\117\000\000\000" "\120\000\000\000" "\121\000\000\000"
- /* 0x52 */ "\122\000\000\000" "\123\000\000\000" "\124\000\000\000"
- /* 0x55 */ "\125\000\000\000" "\126\000\000\000" "\127\000\000\000"
- /* 0x58 */ "\130\000\000\000" "\131\000\000\000" "\132\000\000\000"
- /* 0x5b */ "\133\000\000\000" "\134\000\000\000" "\135\000\000\000"
- /* 0x5e */ "\136\000\000\000" "\137\000\000\000" "\140\000\000\000"
- /* 0x61 */ "\101\000\000\000" "\102\000\000\000" "\103\000\000\000"
- /* 0x64 */ "\104\000\000\000" "\105\000\000\000" "\106\000\000\000"
- /* 0x67 */ "\107\000\000\000" "\110\000\000\000" "\111\000\000\000"
- /* 0x6a */ "\112\000\000\000" "\113\000\000\000" "\114\000\000\000"
- /* 0x6d */ "\115\000\000\000" "\116\000\000\000" "\117\000\000\000"
- /* 0x70 */ "\120\000\000\000" "\121\000\000\000" "\122\000\000\000"
- /* 0x73 */ "\123\000\000\000" "\124\000\000\000" "\125\000\000\000"
- /* 0x76 */ "\126\000\000\000" "\127\000\000\000" "\130\000\000\000"
- /* 0x79 */ "\131\000\000\000" "\132\000\000\000" "\173\000\000\000"
- /* 0x7c */ "\174\000\000\000" "\175\000\000\000" "\176\000\000\000"
- /* 0x7f */ "\177\000\000\000" "\200\000\000\000" "\201\000\000\000"
- /* 0x82 */ "\202\000\000\000" "\203\000\000\000" "\204\000\000\000"
- /* 0x85 */ "\205\000\000\000" "\206\000\000\000" "\207\000\000\000"
- /* 0x88 */ "\210\000\000\000" "\211\000\000\000" "\212\000\000\000"
- /* 0x8b */ "\213\000\000\000" "\214\000\000\000" "\215\000\000\000"
- /* 0x8e */ "\216\000\000\000" "\217\000\000\000" "\220\000\000\000"
- /* 0x91 */ "\221\000\000\000" "\222\000\000\000" "\223\000\000\000"
- /* 0x94 */ "\224\000\000\000" "\225\000\000\000" "\226\000\000\000"
- /* 0x97 */ "\227\000\000\000" "\230\000\000\000" "\231\000\000\000"
- /* 0x9a */ "\232\000\000\000" "\233\000\000\000" "\234\000\000\000"
- /* 0x9d */ "\235\000\000\000" "\236\000\000\000" "\237\000\000\000"
- /* 0xa0 */ "\240\000\000\000" "\241\000\000\000" "\242\000\000\000"
- /* 0xa3 */ "\243\000\000\000" "\244\000\000\000" "\245\000\000\000"
- /* 0xa6 */ "\246\000\000\000" "\247\000\000\000" "\250\000\000\000"
- /* 0xa9 */ "\251\000\000\000" "\252\000\000\000" "\253\000\000\000"
- /* 0xac */ "\254\000\000\000" "\255\000\000\000" "\256\000\000\000"
- /* 0xaf */ "\257\000\000\000" "\260\000\000\000" "\261\000\000\000"
- /* 0xb2 */ "\262\000\000\000" "\263\000\000\000" "\264\000\000\000"
- /* 0xb5 */ "\265\000\000\000" "\266\000\000\000" "\267\000\000\000"
- /* 0xb8 */ "\270\000\000\000" "\271\000\000\000" "\272\000\000\000"
- /* 0xbb */ "\273\000\000\000" "\274\000\000\000" "\275\000\000\000"
- /* 0xbe */ "\276\000\000\000" "\277\000\000\000" "\300\000\000\000"
- /* 0xc1 */ "\301\000\000\000" "\302\000\000\000" "\303\000\000\000"
- /* 0xc4 */ "\304\000\000\000" "\305\000\000\000" "\306\000\000\000"
- /* 0xc7 */ "\307\000\000\000" "\310\000\000\000" "\311\000\000\000"
- /* 0xca */ "\312\000\000\000" "\313\000\000\000" "\314\000\000\000"
- /* 0xcd */ "\315\000\000\000" "\316\000\000\000" "\317\000\000\000"
- /* 0xd0 */ "\320\000\000\000" "\321\000\000\000" "\322\000\000\000"
- /* 0xd3 */ "\323\000\000\000" "\324\000\000\000" "\325\000\000\000"
- /* 0xd6 */ "\326\000\000\000" "\327\000\000\000" "\330\000\000\000"
- /* 0xd9 */ "\331\000\000\000" "\332\000\000\000" "\333\000\000\000"
- /* 0xdc */ "\334\000\000\000" "\335\000\000\000" "\336\000\000\000"
- /* 0xdf */ "\337\000\000\000" "\340\000\000\000" "\341\000\000\000"
- /* 0xe2 */ "\342\000\000\000" "\343\000\000\000" "\344\000\000\000"
- /* 0xe5 */ "\345\000\000\000" "\346\000\000\000" "\347\000\000\000"
- /* 0xe8 */ "\350\000\000\000" "\351\000\000\000" "\352\000\000\000"
- /* 0xeb */ "\353\000\000\000" "\354\000\000\000" "\355\000\000\000"
- /* 0xee */ "\356\000\000\000" "\357\000\000\000" "\360\000\000\000"
- /* 0xf1 */ "\361\000\000\000" "\362\000\000\000" "\363\000\000\000"
- /* 0xf4 */ "\364\000\000\000" "\365\000\000\000" "\366\000\000\000"
- /* 0xf7 */ "\367\000\000\000" "\370\000\000\000" "\371\000\000\000"
- /* 0xfa */ "\372\000\000\000" "\373\000\000\000" "\374\000\000\000"
- /* 0xfd */ "\375\000\000\000" "\376\000\000\000" "\377\000\000\000"
-;
-const char _nl_C_LC_CTYPE_tolower[1536] =
- /* 0x80 */ "\200\000\000\000" "\201\000\000\000" "\202\000\000\000"
- /* 0x83 */ "\203\000\000\000" "\204\000\000\000" "\205\000\000\000"
- /* 0x86 */ "\206\000\000\000" "\207\000\000\000" "\210\000\000\000"
- /* 0x89 */ "\211\000\000\000" "\212\000\000\000" "\213\000\000\000"
- /* 0x8c */ "\214\000\000\000" "\215\000\000\000" "\216\000\000\000"
- /* 0x8f */ "\217\000\000\000" "\220\000\000\000" "\221\000\000\000"
- /* 0x92 */ "\222\000\000\000" "\223\000\000\000" "\224\000\000\000"
- /* 0x95 */ "\225\000\000\000" "\226\000\000\000" "\227\000\000\000"
- /* 0x98 */ "\230\000\000\000" "\231\000\000\000" "\232\000\000\000"
- /* 0x9b */ "\233\000\000\000" "\234\000\000\000" "\235\000\000\000"
- /* 0x9e */ "\236\000\000\000" "\237\000\000\000" "\240\000\000\000"
- /* 0xa1 */ "\241\000\000\000" "\242\000\000\000" "\243\000\000\000"
- /* 0xa4 */ "\244\000\000\000" "\245\000\000\000" "\246\000\000\000"
- /* 0xa7 */ "\247\000\000\000" "\250\000\000\000" "\251\000\000\000"
- /* 0xaa */ "\252\000\000\000" "\253\000\000\000" "\254\000\000\000"
- /* 0xad */ "\255\000\000\000" "\256\000\000\000" "\257\000\000\000"
- /* 0xb0 */ "\260\000\000\000" "\261\000\000\000" "\262\000\000\000"
- /* 0xb3 */ "\263\000\000\000" "\264\000\000\000" "\265\000\000\000"
- /* 0xb6 */ "\266\000\000\000" "\267\000\000\000" "\270\000\000\000"
- /* 0xb9 */ "\271\000\000\000" "\272\000\000\000" "\273\000\000\000"
- /* 0xbc */ "\274\000\000\000" "\275\000\000\000" "\276\000\000\000"
- /* 0xbf */ "\277\000\000\000" "\300\000\000\000" "\301\000\000\000"
- /* 0xc2 */ "\302\000\000\000" "\303\000\000\000" "\304\000\000\000"
- /* 0xc5 */ "\305\000\000\000" "\306\000\000\000" "\307\000\000\000"
- /* 0xc8 */ "\310\000\000\000" "\311\000\000\000" "\312\000\000\000"
- /* 0xcb */ "\313\000\000\000" "\314\000\000\000" "\315\000\000\000"
- /* 0xce */ "\316\000\000\000" "\317\000\000\000" "\320\000\000\000"
- /* 0xd1 */ "\321\000\000\000" "\322\000\000\000" "\323\000\000\000"
- /* 0xd4 */ "\324\000\000\000" "\325\000\000\000" "\326\000\000\000"
- /* 0xd7 */ "\327\000\000\000" "\330\000\000\000" "\331\000\000\000"
- /* 0xda */ "\332\000\000\000" "\333\000\000\000" "\334\000\000\000"
- /* 0xdd */ "\335\000\000\000" "\336\000\000\000" "\337\000\000\000"
- /* 0xe0 */ "\340\000\000\000" "\341\000\000\000" "\342\000\000\000"
- /* 0xe3 */ "\343\000\000\000" "\344\000\000\000" "\345\000\000\000"
- /* 0xe6 */ "\346\000\000\000" "\347\000\000\000" "\350\000\000\000"
- /* 0xe9 */ "\351\000\000\000" "\352\000\000\000" "\353\000\000\000"
- /* 0xec */ "\354\000\000\000" "\355\000\000\000" "\356\000\000\000"
- /* 0xef */ "\357\000\000\000" "\360\000\000\000" "\361\000\000\000"
- /* 0xf2 */ "\362\000\000\000" "\363\000\000\000" "\364\000\000\000"
- /* 0xf5 */ "\365\000\000\000" "\366\000\000\000" "\367\000\000\000"
- /* 0xf8 */ "\370\000\000\000" "\371\000\000\000" "\372\000\000\000"
- /* 0xfb */ "\373\000\000\000" "\374\000\000\000" "\375\000\000\000"
- /* 0xfe */ "\376\000\000\000" "\377\000\000\000" "\000\000\000\000"
- /* 0x01 */ "\001\000\000\000" "\002\000\000\000" "\003\000\000\000"
- /* 0x04 */ "\004\000\000\000" "\005\000\000\000" "\006\000\000\000"
- /* 0x07 */ "\007\000\000\000" "\010\000\000\000" "\011\000\000\000"
- /* 0x0a */ "\012\000\000\000" "\013\000\000\000" "\014\000\000\000"
- /* 0x0d */ "\015\000\000\000" "\016\000\000\000" "\017\000\000\000"
- /* 0x10 */ "\020\000\000\000" "\021\000\000\000" "\022\000\000\000"
- /* 0x13 */ "\023\000\000\000" "\024\000\000\000" "\025\000\000\000"
- /* 0x16 */ "\026\000\000\000" "\027\000\000\000" "\030\000\000\000"
- /* 0x19 */ "\031\000\000\000" "\032\000\000\000" "\033\000\000\000"
- /* 0x1c */ "\034\000\000\000" "\035\000\000\000" "\036\000\000\000"
- /* 0x1f */ "\037\000\000\000" "\040\000\000\000" "\041\000\000\000"
- /* 0x22 */ "\042\000\000\000" "\043\000\000\000" "\044\000\000\000"
- /* 0x25 */ "\045\000\000\000" "\046\000\000\000" "\047\000\000\000"
- /* 0x28 */ "\050\000\000\000" "\051\000\000\000" "\052\000\000\000"
- /* 0x2b */ "\053\000\000\000" "\054\000\000\000" "\055\000\000\000"
- /* 0x2e */ "\056\000\000\000" "\057\000\000\000" "\060\000\000\000"
- /* 0x31 */ "\061\000\000\000" "\062\000\000\000" "\063\000\000\000"
- /* 0x34 */ "\064\000\000\000" "\065\000\000\000" "\066\000\000\000"
- /* 0x37 */ "\067\000\000\000" "\070\000\000\000" "\071\000\000\000"
- /* 0x3a */ "\072\000\000\000" "\073\000\000\000" "\074\000\000\000"
- /* 0x3d */ "\075\000\000\000" "\076\000\000\000" "\077\000\000\000"
- /* 0x40 */ "\100\000\000\000" "\141\000\000\000" "\142\000\000\000"
- /* 0x43 */ "\143\000\000\000" "\144\000\000\000" "\145\000\000\000"
- /* 0x46 */ "\146\000\000\000" "\147\000\000\000" "\150\000\000\000"
- /* 0x49 */ "\151\000\000\000" "\152\000\000\000" "\153\000\000\000"
- /* 0x4c */ "\154\000\000\000" "\155\000\000\000" "\156\000\000\000"
- /* 0x4f */ "\157\000\000\000" "\160\000\000\000" "\161\000\000\000"
- /* 0x52 */ "\162\000\000\000" "\163\000\000\000" "\164\000\000\000"
- /* 0x55 */ "\165\000\000\000" "\166\000\000\000" "\167\000\000\000"
- /* 0x58 */ "\170\000\000\000" "\171\000\000\000" "\172\000\000\000"
- /* 0x5b */ "\133\000\000\000" "\134\000\000\000" "\135\000\000\000"
- /* 0x5e */ "\136\000\000\000" "\137\000\000\000" "\140\000\000\000"
- /* 0x61 */ "\141\000\000\000" "\142\000\000\000" "\143\000\000\000"
- /* 0x64 */ "\144\000\000\000" "\145\000\000\000" "\146\000\000\000"
- /* 0x67 */ "\147\000\000\000" "\150\000\000\000" "\151\000\000\000"
- /* 0x6a */ "\152\000\000\000" "\153\000\000\000" "\154\000\000\000"
- /* 0x6d */ "\155\000\000\000" "\156\000\000\000" "\157\000\000\000"
- /* 0x70 */ "\160\000\000\000" "\161\000\000\000" "\162\000\000\000"
- /* 0x73 */ "\163\000\000\000" "\164\000\000\000" "\165\000\000\000"
- /* 0x76 */ "\166\000\000\000" "\167\000\000\000" "\170\000\000\000"
- /* 0x79 */ "\171\000\000\000" "\172\000\000\000" "\173\000\000\000"
- /* 0x7c */ "\174\000\000\000" "\175\000\000\000" "\176\000\000\000"
- /* 0x7f */ "\177\000\000\000" "\200\000\000\000" "\201\000\000\000"
- /* 0x82 */ "\202\000\000\000" "\203\000\000\000" "\204\000\000\000"
- /* 0x85 */ "\205\000\000\000" "\206\000\000\000" "\207\000\000\000"
- /* 0x88 */ "\210\000\000\000" "\211\000\000\000" "\212\000\000\000"
- /* 0x8b */ "\213\000\000\000" "\214\000\000\000" "\215\000\000\000"
- /* 0x8e */ "\216\000\000\000" "\217\000\000\000" "\220\000\000\000"
- /* 0x91 */ "\221\000\000\000" "\222\000\000\000" "\223\000\000\000"
- /* 0x94 */ "\224\000\000\000" "\225\000\000\000" "\226\000\000\000"
- /* 0x97 */ "\227\000\000\000" "\230\000\000\000" "\231\000\000\000"
- /* 0x9a */ "\232\000\000\000" "\233\000\000\000" "\234\000\000\000"
- /* 0x9d */ "\235\000\000\000" "\236\000\000\000" "\237\000\000\000"
- /* 0xa0 */ "\240\000\000\000" "\241\000\000\000" "\242\000\000\000"
- /* 0xa3 */ "\243\000\000\000" "\244\000\000\000" "\245\000\000\000"
- /* 0xa6 */ "\246\000\000\000" "\247\000\000\000" "\250\000\000\000"
- /* 0xa9 */ "\251\000\000\000" "\252\000\000\000" "\253\000\000\000"
- /* 0xac */ "\254\000\000\000" "\255\000\000\000" "\256\000\000\000"
- /* 0xaf */ "\257\000\000\000" "\260\000\000\000" "\261\000\000\000"
- /* 0xb2 */ "\262\000\000\000" "\263\000\000\000" "\264\000\000\000"
- /* 0xb5 */ "\265\000\000\000" "\266\000\000\000" "\267\000\000\000"
- /* 0xb8 */ "\270\000\000\000" "\271\000\000\000" "\272\000\000\000"
- /* 0xbb */ "\273\000\000\000" "\274\000\000\000" "\275\000\000\000"
- /* 0xbe */ "\276\000\000\000" "\277\000\000\000" "\300\000\000\000"
- /* 0xc1 */ "\301\000\000\000" "\302\000\000\000" "\303\000\000\000"
- /* 0xc4 */ "\304\000\000\000" "\305\000\000\000" "\306\000\000\000"
- /* 0xc7 */ "\307\000\000\000" "\310\000\000\000" "\311\000\000\000"
- /* 0xca */ "\312\000\000\000" "\313\000\000\000" "\314\000\000\000"
- /* 0xcd */ "\315\000\000\000" "\316\000\000\000" "\317\000\000\000"
- /* 0xd0 */ "\320\000\000\000" "\321\000\000\000" "\322\000\000\000"
- /* 0xd3 */ "\323\000\000\000" "\324\000\000\000" "\325\000\000\000"
- /* 0xd6 */ "\326\000\000\000" "\327\000\000\000" "\330\000\000\000"
- /* 0xd9 */ "\331\000\000\000" "\332\000\000\000" "\333\000\000\000"
- /* 0xdc */ "\334\000\000\000" "\335\000\000\000" "\336\000\000\000"
- /* 0xdf */ "\337\000\000\000" "\340\000\000\000" "\341\000\000\000"
- /* 0xe2 */ "\342\000\000\000" "\343\000\000\000" "\344\000\000\000"
- /* 0xe5 */ "\345\000\000\000" "\346\000\000\000" "\347\000\000\000"
- /* 0xe8 */ "\350\000\000\000" "\351\000\000\000" "\352\000\000\000"
- /* 0xeb */ "\353\000\000\000" "\354\000\000\000" "\355\000\000\000"
- /* 0xee */ "\356\000\000\000" "\357\000\000\000" "\360\000\000\000"
- /* 0xf1 */ "\361\000\000\000" "\362\000\000\000" "\363\000\000\000"
- /* 0xf4 */ "\364\000\000\000" "\365\000\000\000" "\366\000\000\000"
- /* 0xf7 */ "\367\000\000\000" "\370\000\000\000" "\371\000\000\000"
- /* 0xfa */ "\372\000\000\000" "\373\000\000\000" "\374\000\000\000"
- /* 0xfd */ "\375\000\000\000" "\376\000\000\000" "\377\000\000\000"
-;
-const char _nl_C_LC_CTYPE_names[1024] =
- /* 0x00 */ "\000\000\000\000" "\001\000\000\000" "\002\000\000\000"
- /* 0x03 */ "\003\000\000\000" "\004\000\000\000" "\005\000\000\000"
- /* 0x06 */ "\006\000\000\000" "\007\000\000\000" "\010\000\000\000"
- /* 0x09 */ "\011\000\000\000" "\012\000\000\000" "\013\000\000\000"
- /* 0x0c */ "\014\000\000\000" "\015\000\000\000" "\016\000\000\000"
- /* 0x0f */ "\017\000\000\000" "\020\000\000\000" "\021\000\000\000"
- /* 0x12 */ "\022\000\000\000" "\023\000\000\000" "\024\000\000\000"
- /* 0x15 */ "\025\000\000\000" "\026\000\000\000" "\027\000\000\000"
- /* 0x18 */ "\030\000\000\000" "\031\000\000\000" "\032\000\000\000"
- /* 0x1b */ "\033\000\000\000" "\034\000\000\000" "\035\000\000\000"
- /* 0x1e */ "\036\000\000\000" "\037\000\000\000" "\040\000\000\000"
- /* 0x21 */ "\041\000\000\000" "\042\000\000\000" "\043\000\000\000"
- /* 0x24 */ "\044\000\000\000" "\045\000\000\000" "\046\000\000\000"
- /* 0x27 */ "\047\000\000\000" "\050\000\000\000" "\051\000\000\000"
- /* 0x2a */ "\052\000\000\000" "\053\000\000\000" "\054\000\000\000"
- /* 0x2d */ "\055\000\000\000" "\056\000\000\000" "\057\000\000\000"
- /* 0x30 */ "\060\000\000\000" "\061\000\000\000" "\062\000\000\000"
- /* 0x33 */ "\063\000\000\000" "\064\000\000\000" "\065\000\000\000"
- /* 0x36 */ "\066\000\000\000" "\067\000\000\000" "\070\000\000\000"
- /* 0x39 */ "\071\000\000\000" "\072\000\000\000" "\073\000\000\000"
- /* 0x3c */ "\074\000\000\000" "\075\000\000\000" "\076\000\000\000"
- /* 0x3f */ "\077\000\000\000" "\100\000\000\000" "\101\000\000\000"
- /* 0x42 */ "\102\000\000\000" "\103\000\000\000" "\104\000\000\000"
- /* 0x45 */ "\105\000\000\000" "\106\000\000\000" "\107\000\000\000"
- /* 0x48 */ "\110\000\000\000" "\111\000\000\000" "\112\000\000\000"
- /* 0x4b */ "\113\000\000\000" "\114\000\000\000" "\115\000\000\000"
- /* 0x4e */ "\116\000\000\000" "\117\000\000\000" "\120\000\000\000"
- /* 0x51 */ "\121\000\000\000" "\122\000\000\000" "\123\000\000\000"
- /* 0x54 */ "\124\000\000\000" "\125\000\000\000" "\126\000\000\000"
- /* 0x57 */ "\127\000\000\000" "\130\000\000\000" "\131\000\000\000"
- /* 0x5a */ "\132\000\000\000" "\133\000\000\000" "\134\000\000\000"
- /* 0x5d */ "\135\000\000\000" "\136\000\000\000" "\137\000\000\000"
- /* 0x60 */ "\140\000\000\000" "\141\000\000\000" "\142\000\000\000"
- /* 0x63 */ "\143\000\000\000" "\144\000\000\000" "\145\000\000\000"
- /* 0x66 */ "\146\000\000\000" "\147\000\000\000" "\150\000\000\000"
- /* 0x69 */ "\151\000\000\000" "\152\000\000\000" "\153\000\000\000"
- /* 0x6c */ "\154\000\000\000" "\155\000\000\000" "\156\000\000\000"
- /* 0x6f */ "\157\000\000\000" "\160\000\000\000" "\161\000\000\000"
- /* 0x72 */ "\162\000\000\000" "\163\000\000\000" "\164\000\000\000"
- /* 0x75 */ "\165\000\000\000" "\166\000\000\000" "\167\000\000\000"
- /* 0x78 */ "\170\000\000\000" "\171\000\000\000" "\172\000\000\000"
- /* 0x7b */ "\173\000\000\000" "\174\000\000\000" "\175\000\000\000"
- /* 0x7e */ "\176\000\000\000" "\177\000\000\000" "\200\000\000\000"
- /* 0x81 */ "\201\000\000\000" "\202\000\000\000" "\203\000\000\000"
- /* 0x84 */ "\204\000\000\000" "\205\000\000\000" "\206\000\000\000"
- /* 0x87 */ "\207\000\000\000" "\210\000\000\000" "\211\000\000\000"
- /* 0x8a */ "\212\000\000\000" "\213\000\000\000" "\214\000\000\000"
- /* 0x8d */ "\215\000\000\000" "\216\000\000\000" "\217\000\000\000"
- /* 0x90 */ "\220\000\000\000" "\221\000\000\000" "\222\000\000\000"
- /* 0x93 */ "\223\000\000\000" "\224\000\000\000" "\225\000\000\000"
- /* 0x96 */ "\226\000\000\000" "\227\000\000\000" "\230\000\000\000"
- /* 0x99 */ "\231\000\000\000" "\232\000\000\000" "\233\000\000\000"
- /* 0x9c */ "\234\000\000\000" "\235\000\000\000" "\236\000\000\000"
- /* 0x9f */ "\237\000\000\000" "\240\000\000\000" "\241\000\000\000"
- /* 0xa2 */ "\242\000\000\000" "\243\000\000\000" "\244\000\000\000"
- /* 0xa5 */ "\245\000\000\000" "\246\000\000\000" "\247\000\000\000"
- /* 0xa8 */ "\250\000\000\000" "\251\000\000\000" "\252\000\000\000"
- /* 0xab */ "\253\000\000\000" "\254\000\000\000" "\255\000\000\000"
- /* 0xae */ "\256\000\000\000" "\257\000\000\000" "\260\000\000\000"
- /* 0xb1 */ "\261\000\000\000" "\262\000\000\000" "\263\000\000\000"
- /* 0xb4 */ "\264\000\000\000" "\265\000\000\000" "\266\000\000\000"
- /* 0xb7 */ "\267\000\000\000" "\270\000\000\000" "\271\000\000\000"
- /* 0xba */ "\272\000\000\000" "\273\000\000\000" "\274\000\000\000"
- /* 0xbd */ "\275\000\000\000" "\276\000\000\000" "\277\000\000\000"
- /* 0xc0 */ "\300\000\000\000" "\301\000\000\000" "\302\000\000\000"
- /* 0xc3 */ "\303\000\000\000" "\304\000\000\000" "\305\000\000\000"
- /* 0xc6 */ "\306\000\000\000" "\307\000\000\000" "\310\000\000\000"
- /* 0xc9 */ "\311\000\000\000" "\312\000\000\000" "\313\000\000\000"
- /* 0xcc */ "\314\000\000\000" "\315\000\000\000" "\316\000\000\000"
- /* 0xcf */ "\317\000\000\000" "\320\000\000\000" "\321\000\000\000"
- /* 0xd2 */ "\322\000\000\000" "\323\000\000\000" "\324\000\000\000"
- /* 0xd5 */ "\325\000\000\000" "\326\000\000\000" "\327\000\000\000"
- /* 0xd8 */ "\330\000\000\000" "\331\000\000\000" "\332\000\000\000"
- /* 0xdb */ "\333\000\000\000" "\334\000\000\000" "\335\000\000\000"
- /* 0xde */ "\336\000\000\000" "\337\000\000\000" "\340\000\000\000"
- /* 0xe1 */ "\341\000\000\000" "\342\000\000\000" "\343\000\000\000"
- /* 0xe4 */ "\344\000\000\000" "\345\000\000\000" "\346\000\000\000"
- /* 0xe7 */ "\347\000\000\000" "\350\000\000\000" "\351\000\000\000"
- /* 0xea */ "\352\000\000\000" "\353\000\000\000" "\354\000\000\000"
- /* 0xed */ "\355\000\000\000" "\356\000\000\000" "\357\000\000\000"
- /* 0xf0 */ "\360\000\000\000" "\361\000\000\000" "\362\000\000\000"
- /* 0xf3 */ "\363\000\000\000" "\364\000\000\000" "\365\000\000\000"
- /* 0xf6 */ "\366\000\000\000" "\367\000\000\000" "\370\000\000\000"
- /* 0xf9 */ "\371\000\000\000" "\372\000\000\000" "\373\000\000\000"
- /* 0xfc */ "\374\000\000\000" "\375\000\000\000" "\376\000\000\000"
- /* 0xff */ "\377\000\000\000"
-;
-#elif BYTE_ORDER == BIG_ENDIAN
-const char _nl_C_LC_CTYPE_toupper[1536] =
- /* 0x80 */ "\000\000\000\200" "\000\000\000\201" "\000\000\000\202"
- /* 0x83 */ "\000\000\000\203" "\000\000\000\204" "\000\000\000\205"
- /* 0x86 */ "\000\000\000\206" "\000\000\000\207" "\000\000\000\210"
- /* 0x89 */ "\000\000\000\211" "\000\000\000\212" "\000\000\000\213"
- /* 0x8c */ "\000\000\000\214" "\000\000\000\215" "\000\000\000\216"
- /* 0x8f */ "\000\000\000\217" "\000\000\000\220" "\000\000\000\221"
- /* 0x92 */ "\000\000\000\222" "\000\000\000\223" "\000\000\000\224"
- /* 0x95 */ "\000\000\000\225" "\000\000\000\226" "\000\000\000\227"
- /* 0x98 */ "\000\000\000\230" "\000\000\000\231" "\000\000\000\232"
- /* 0x9b */ "\000\000\000\233" "\000\000\000\234" "\000\000\000\235"
- /* 0x9e */ "\000\000\000\236" "\000\000\000\237" "\000\000\000\240"
- /* 0xa1 */ "\000\000\000\241" "\000\000\000\242" "\000\000\000\243"
- /* 0xa4 */ "\000\000\000\244" "\000\000\000\245" "\000\000\000\246"
- /* 0xa7 */ "\000\000\000\247" "\000\000\000\250" "\000\000\000\251"
- /* 0xaa */ "\000\000\000\252" "\000\000\000\253" "\000\000\000\254"
- /* 0xad */ "\000\000\000\255" "\000\000\000\256" "\000\000\000\257"
- /* 0xb0 */ "\000\000\000\260" "\000\000\000\261" "\000\000\000\262"
- /* 0xb3 */ "\000\000\000\263" "\000\000\000\264" "\000\000\000\265"
- /* 0xb6 */ "\000\000\000\266" "\000\000\000\267" "\000\000\000\270"
- /* 0xb9 */ "\000\000\000\271" "\000\000\000\272" "\000\000\000\273"
- /* 0xbc */ "\000\000\000\274" "\000\000\000\275" "\000\000\000\276"
- /* 0xbf */ "\000\000\000\277" "\000\000\000\300" "\000\000\000\301"
- /* 0xc2 */ "\000\000\000\302" "\000\000\000\303" "\000\000\000\304"
- /* 0xc5 */ "\000\000\000\305" "\000\000\000\306" "\000\000\000\307"
- /* 0xc8 */ "\000\000\000\310" "\000\000\000\311" "\000\000\000\312"
- /* 0xcb */ "\000\000\000\313" "\000\000\000\314" "\000\000\000\315"
- /* 0xce */ "\000\000\000\316" "\000\000\000\317" "\000\000\000\320"
- /* 0xd1 */ "\000\000\000\321" "\000\000\000\322" "\000\000\000\323"
- /* 0xd4 */ "\000\000\000\324" "\000\000\000\325" "\000\000\000\326"
- /* 0xd7 */ "\000\000\000\327" "\000\000\000\330" "\000\000\000\331"
- /* 0xda */ "\000\000\000\332" "\000\000\000\333" "\000\000\000\334"
- /* 0xdd */ "\000\000\000\335" "\000\000\000\336" "\000\000\000\337"
- /* 0xe0 */ "\000\000\000\340" "\000\000\000\341" "\000\000\000\342"
- /* 0xe3 */ "\000\000\000\343" "\000\000\000\344" "\000\000\000\345"
- /* 0xe6 */ "\000\000\000\346" "\000\000\000\347" "\000\000\000\350"
- /* 0xe9 */ "\000\000\000\351" "\000\000\000\352" "\000\000\000\353"
- /* 0xec */ "\000\000\000\354" "\000\000\000\355" "\000\000\000\356"
- /* 0xef */ "\000\000\000\357" "\000\000\000\360" "\000\000\000\361"
- /* 0xf2 */ "\000\000\000\362" "\000\000\000\363" "\000\000\000\364"
- /* 0xf5 */ "\000\000\000\365" "\000\000\000\366" "\000\000\000\367"
- /* 0xf8 */ "\000\000\000\370" "\000\000\000\371" "\000\000\000\372"
- /* 0xfb */ "\000\000\000\373" "\000\000\000\374" "\000\000\000\375"
- /* 0xfe */ "\000\000\000\376" "\000\000\000\377" "\000\000\000\000"
- /* 0x01 */ "\000\000\000\001" "\000\000\000\002" "\000\000\000\003"
- /* 0x04 */ "\000\000\000\004" "\000\000\000\005" "\000\000\000\006"
- /* 0x07 */ "\000\000\000\007" "\000\000\000\010" "\000\000\000\011"
- /* 0x0a */ "\000\000\000\012" "\000\000\000\013" "\000\000\000\014"
- /* 0x0d */ "\000\000\000\015" "\000\000\000\016" "\000\000\000\017"
- /* 0x10 */ "\000\000\000\020" "\000\000\000\021" "\000\000\000\022"
- /* 0x13 */ "\000\000\000\023" "\000\000\000\024" "\000\000\000\025"
- /* 0x16 */ "\000\000\000\026" "\000\000\000\027" "\000\000\000\030"
- /* 0x19 */ "\000\000\000\031" "\000\000\000\032" "\000\000\000\033"
- /* 0x1c */ "\000\000\000\034" "\000\000\000\035" "\000\000\000\036"
- /* 0x1f */ "\000\000\000\037" "\000\000\000\040" "\000\000\000\041"
- /* 0x22 */ "\000\000\000\042" "\000\000\000\043" "\000\000\000\044"
- /* 0x25 */ "\000\000\000\045" "\000\000\000\046" "\000\000\000\047"
- /* 0x28 */ "\000\000\000\050" "\000\000\000\051" "\000\000\000\052"
- /* 0x2b */ "\000\000\000\053" "\000\000\000\054" "\000\000\000\055"
- /* 0x2e */ "\000\000\000\056" "\000\000\000\057" "\000\000\000\060"
- /* 0x31 */ "\000\000\000\061" "\000\000\000\062" "\000\000\000\063"
- /* 0x34 */ "\000\000\000\064" "\000\000\000\065" "\000\000\000\066"
- /* 0x37 */ "\000\000\000\067" "\000\000\000\070" "\000\000\000\071"
- /* 0x3a */ "\000\000\000\072" "\000\000\000\073" "\000\000\000\074"
- /* 0x3d */ "\000\000\000\075" "\000\000\000\076" "\000\000\000\077"
- /* 0x40 */ "\000\000\000\100" "\000\000\000\101" "\000\000\000\102"
- /* 0x43 */ "\000\000\000\103" "\000\000\000\104" "\000\000\000\105"
- /* 0x46 */ "\000\000\000\106" "\000\000\000\107" "\000\000\000\110"
- /* 0x49 */ "\000\000\000\111" "\000\000\000\112" "\000\000\000\113"
- /* 0x4c */ "\000\000\000\114" "\000\000\000\115" "\000\000\000\116"
- /* 0x4f */ "\000\000\000\117" "\000\000\000\120" "\000\000\000\121"
- /* 0x52 */ "\000\000\000\122" "\000\000\000\123" "\000\000\000\124"
- /* 0x55 */ "\000\000\000\125" "\000\000\000\126" "\000\000\000\127"
- /* 0x58 */ "\000\000\000\130" "\000\000\000\131" "\000\000\000\132"
- /* 0x5b */ "\000\000\000\133" "\000\000\000\134" "\000\000\000\135"
- /* 0x5e */ "\000\000\000\136" "\000\000\000\137" "\000\000\000\140"
- /* 0x61 */ "\000\000\000\101" "\000\000\000\102" "\000\000\000\103"
- /* 0x64 */ "\000\000\000\104" "\000\000\000\105" "\000\000\000\106"
- /* 0x67 */ "\000\000\000\107" "\000\000\000\110" "\000\000\000\111"
- /* 0x6a */ "\000\000\000\112" "\000\000\000\113" "\000\000\000\114"
- /* 0x6d */ "\000\000\000\115" "\000\000\000\116" "\000\000\000\117"
- /* 0x70 */ "\000\000\000\120" "\000\000\000\121" "\000\000\000\122"
- /* 0x73 */ "\000\000\000\123" "\000\000\000\124" "\000\000\000\125"
- /* 0x76 */ "\000\000\000\126" "\000\000\000\127" "\000\000\000\130"
- /* 0x79 */ "\000\000\000\131" "\000\000\000\132" "\000\000\000\173"
- /* 0x7c */ "\000\000\000\174" "\000\000\000\175" "\000\000\000\176"
- /* 0x7f */ "\000\000\000\177" "\000\000\000\200" "\000\000\000\201"
- /* 0x82 */ "\000\000\000\202" "\000\000\000\203" "\000\000\000\204"
- /* 0x85 */ "\000\000\000\205" "\000\000\000\206" "\000\000\000\207"
- /* 0x88 */ "\000\000\000\210" "\000\000\000\211" "\000\000\000\212"
- /* 0x8b */ "\000\000\000\213" "\000\000\000\214" "\000\000\000\215"
- /* 0x8e */ "\000\000\000\216" "\000\000\000\217" "\000\000\000\220"
- /* 0x91 */ "\000\000\000\221" "\000\000\000\222" "\000\000\000\223"
- /* 0x94 */ "\000\000\000\224" "\000\000\000\225" "\000\000\000\226"
- /* 0x97 */ "\000\000\000\227" "\000\000\000\230" "\000\000\000\231"
- /* 0x9a */ "\000\000\000\232" "\000\000\000\233" "\000\000\000\234"
- /* 0x9d */ "\000\000\000\235" "\000\000\000\236" "\000\000\000\237"
- /* 0xa0 */ "\000\000\000\240" "\000\000\000\241" "\000\000\000\242"
- /* 0xa3 */ "\000\000\000\243" "\000\000\000\244" "\000\000\000\245"
- /* 0xa6 */ "\000\000\000\246" "\000\000\000\247" "\000\000\000\250"
- /* 0xa9 */ "\000\000\000\251" "\000\000\000\252" "\000\000\000\253"
- /* 0xac */ "\000\000\000\254" "\000\000\000\255" "\000\000\000\256"
- /* 0xaf */ "\000\000\000\257" "\000\000\000\260" "\000\000\000\261"
- /* 0xb2 */ "\000\000\000\262" "\000\000\000\263" "\000\000\000\264"
- /* 0xb5 */ "\000\000\000\265" "\000\000\000\266" "\000\000\000\267"
- /* 0xb8 */ "\000\000\000\270" "\000\000\000\271" "\000\000\000\272"
- /* 0xbb */ "\000\000\000\273" "\000\000\000\274" "\000\000\000\275"
- /* 0xbe */ "\000\000\000\276" "\000\000\000\277" "\000\000\000\300"
- /* 0xc1 */ "\000\000\000\301" "\000\000\000\302" "\000\000\000\303"
- /* 0xc4 */ "\000\000\000\304" "\000\000\000\305" "\000\000\000\306"
- /* 0xc7 */ "\000\000\000\307" "\000\000\000\310" "\000\000\000\311"
- /* 0xca */ "\000\000\000\312" "\000\000\000\313" "\000\000\000\314"
- /* 0xcd */ "\000\000\000\315" "\000\000\000\316" "\000\000\000\317"
- /* 0xd0 */ "\000\000\000\320" "\000\000\000\321" "\000\000\000\322"
- /* 0xd3 */ "\000\000\000\323" "\000\000\000\324" "\000\000\000\325"
- /* 0xd6 */ "\000\000\000\326" "\000\000\000\327" "\000\000\000\330"
- /* 0xd9 */ "\000\000\000\331" "\000\000\000\332" "\000\000\000\333"
- /* 0xdc */ "\000\000\000\334" "\000\000\000\335" "\000\000\000\336"
- /* 0xdf */ "\000\000\000\337" "\000\000\000\340" "\000\000\000\341"
- /* 0xe2 */ "\000\000\000\342" "\000\000\000\343" "\000\000\000\344"
- /* 0xe5 */ "\000\000\000\345" "\000\000\000\346" "\000\000\000\347"
- /* 0xe8 */ "\000\000\000\350" "\000\000\000\351" "\000\000\000\352"
- /* 0xeb */ "\000\000\000\353" "\000\000\000\354" "\000\000\000\355"
- /* 0xee */ "\000\000\000\356" "\000\000\000\357" "\000\000\000\360"
- /* 0xf1 */ "\000\000\000\361" "\000\000\000\362" "\000\000\000\363"
- /* 0xf4 */ "\000\000\000\364" "\000\000\000\365" "\000\000\000\366"
- /* 0xf7 */ "\000\000\000\367" "\000\000\000\370" "\000\000\000\371"
- /* 0xfa */ "\000\000\000\372" "\000\000\000\373" "\000\000\000\374"
- /* 0xfd */ "\000\000\000\375" "\000\000\000\376" "\000\000\000\377"
-;
-const char _nl_C_LC_CTYPE_tolower[1536] =
- /* 0x80 */ "\000\000\000\200" "\000\000\000\201" "\000\000\000\202"
- /* 0x83 */ "\000\000\000\203" "\000\000\000\204" "\000\000\000\205"
- /* 0x86 */ "\000\000\000\206" "\000\000\000\207" "\000\000\000\210"
- /* 0x89 */ "\000\000\000\211" "\000\000\000\212" "\000\000\000\213"
- /* 0x8c */ "\000\000\000\214" "\000\000\000\215" "\000\000\000\216"
- /* 0x8f */ "\000\000\000\217" "\000\000\000\220" "\000\000\000\221"
- /* 0x92 */ "\000\000\000\222" "\000\000\000\223" "\000\000\000\224"
- /* 0x95 */ "\000\000\000\225" "\000\000\000\226" "\000\000\000\227"
- /* 0x98 */ "\000\000\000\230" "\000\000\000\231" "\000\000\000\232"
- /* 0x9b */ "\000\000\000\233" "\000\000\000\234" "\000\000\000\235"
- /* 0x9e */ "\000\000\000\236" "\000\000\000\237" "\000\000\000\240"
- /* 0xa1 */ "\000\000\000\241" "\000\000\000\242" "\000\000\000\243"
- /* 0xa4 */ "\000\000\000\244" "\000\000\000\245" "\000\000\000\246"
- /* 0xa7 */ "\000\000\000\247" "\000\000\000\250" "\000\000\000\251"
- /* 0xaa */ "\000\000\000\252" "\000\000\000\253" "\000\000\000\254"
- /* 0xad */ "\000\000\000\255" "\000\000\000\256" "\000\000\000\257"
- /* 0xb0 */ "\000\000\000\260" "\000\000\000\261" "\000\000\000\262"
- /* 0xb3 */ "\000\000\000\263" "\000\000\000\264" "\000\000\000\265"
- /* 0xb6 */ "\000\000\000\266" "\000\000\000\267" "\000\000\000\270"
- /* 0xb9 */ "\000\000\000\271" "\000\000\000\272" "\000\000\000\273"
- /* 0xbc */ "\000\000\000\274" "\000\000\000\275" "\000\000\000\276"
- /* 0xbf */ "\000\000\000\277" "\000\000\000\300" "\000\000\000\301"
- /* 0xc2 */ "\000\000\000\302" "\000\000\000\303" "\000\000\000\304"
- /* 0xc5 */ "\000\000\000\305" "\000\000\000\306" "\000\000\000\307"
- /* 0xc8 */ "\000\000\000\310" "\000\000\000\311" "\000\000\000\312"
- /* 0xcb */ "\000\000\000\313" "\000\000\000\314" "\000\000\000\315"
- /* 0xce */ "\000\000\000\316" "\000\000\000\317" "\000\000\000\320"
- /* 0xd1 */ "\000\000\000\321" "\000\000\000\322" "\000\000\000\323"
- /* 0xd4 */ "\000\000\000\324" "\000\000\000\325" "\000\000\000\326"
- /* 0xd7 */ "\000\000\000\327" "\000\000\000\330" "\000\000\000\331"
- /* 0xda */ "\000\000\000\332" "\000\000\000\333" "\000\000\000\334"
- /* 0xdd */ "\000\000\000\335" "\000\000\000\336" "\000\000\000\337"
- /* 0xe0 */ "\000\000\000\340" "\000\000\000\341" "\000\000\000\342"
- /* 0xe3 */ "\000\000\000\343" "\000\000\000\344" "\000\000\000\345"
- /* 0xe6 */ "\000\000\000\346" "\000\000\000\347" "\000\000\000\350"
- /* 0xe9 */ "\000\000\000\351" "\000\000\000\352" "\000\000\000\353"
- /* 0xec */ "\000\000\000\354" "\000\000\000\355" "\000\000\000\356"
- /* 0xef */ "\000\000\000\357" "\000\000\000\360" "\000\000\000\361"
- /* 0xf2 */ "\000\000\000\362" "\000\000\000\363" "\000\000\000\364"
- /* 0xf5 */ "\000\000\000\365" "\000\000\000\366" "\000\000\000\367"
- /* 0xf8 */ "\000\000\000\370" "\000\000\000\371" "\000\000\000\372"
- /* 0xfb */ "\000\000\000\373" "\000\000\000\374" "\000\000\000\375"
- /* 0xfe */ "\000\000\000\376" "\000\000\000\377" "\000\000\000\000"
- /* 0x01 */ "\000\000\000\001" "\000\000\000\002" "\000\000\000\003"
- /* 0x04 */ "\000\000\000\004" "\000\000\000\005" "\000\000\000\006"
- /* 0x07 */ "\000\000\000\007" "\000\000\000\010" "\000\000\000\011"
- /* 0x0a */ "\000\000\000\012" "\000\000\000\013" "\000\000\000\014"
- /* 0x0d */ "\000\000\000\015" "\000\000\000\016" "\000\000\000\017"
- /* 0x10 */ "\000\000\000\020" "\000\000\000\021" "\000\000\000\022"
- /* 0x13 */ "\000\000\000\023" "\000\000\000\024" "\000\000\000\025"
- /* 0x16 */ "\000\000\000\026" "\000\000\000\027" "\000\000\000\030"
- /* 0x19 */ "\000\000\000\031" "\000\000\000\032" "\000\000\000\033"
- /* 0x1c */ "\000\000\000\034" "\000\000\000\035" "\000\000\000\036"
- /* 0x1f */ "\000\000\000\037" "\000\000\000\040" "\000\000\000\041"
- /* 0x22 */ "\000\000\000\042" "\000\000\000\043" "\000\000\000\044"
- /* 0x25 */ "\000\000\000\045" "\000\000\000\046" "\000\000\000\047"
- /* 0x28 */ "\000\000\000\050" "\000\000\000\051" "\000\000\000\052"
- /* 0x2b */ "\000\000\000\053" "\000\000\000\054" "\000\000\000\055"
- /* 0x2e */ "\000\000\000\056" "\000\000\000\057" "\000\000\000\060"
- /* 0x31 */ "\000\000\000\061" "\000\000\000\062" "\000\000\000\063"
- /* 0x34 */ "\000\000\000\064" "\000\000\000\065" "\000\000\000\066"
- /* 0x37 */ "\000\000\000\067" "\000\000\000\070" "\000\000\000\071"
- /* 0x3a */ "\000\000\000\072" "\000\000\000\073" "\000\000\000\074"
- /* 0x3d */ "\000\000\000\075" "\000\000\000\076" "\000\000\000\077"
- /* 0x40 */ "\000\000\000\100" "\000\000\000\141" "\000\000\000\142"
- /* 0x43 */ "\000\000\000\143" "\000\000\000\144" "\000\000\000\145"
- /* 0x46 */ "\000\000\000\146" "\000\000\000\147" "\000\000\000\150"
- /* 0x49 */ "\000\000\000\151" "\000\000\000\152" "\000\000\000\153"
- /* 0x4c */ "\000\000\000\154" "\000\000\000\155" "\000\000\000\156"
- /* 0x4f */ "\000\000\000\157" "\000\000\000\160" "\000\000\000\161"
- /* 0x52 */ "\000\000\000\162" "\000\000\000\163" "\000\000\000\164"
- /* 0x55 */ "\000\000\000\165" "\000\000\000\166" "\000\000\000\167"
- /* 0x58 */ "\000\000\000\170" "\000\000\000\171" "\000\000\000\172"
- /* 0x5b */ "\000\000\000\133" "\000\000\000\134" "\000\000\000\135"
- /* 0x5e */ "\000\000\000\136" "\000\000\000\137" "\000\000\000\140"
- /* 0x61 */ "\000\000\000\141" "\000\000\000\142" "\000\000\000\143"
- /* 0x64 */ "\000\000\000\144" "\000\000\000\145" "\000\000\000\146"
- /* 0x67 */ "\000\000\000\147" "\000\000\000\150" "\000\000\000\151"
- /* 0x6a */ "\000\000\000\152" "\000\000\000\153" "\000\000\000\154"
- /* 0x6d */ "\000\000\000\155" "\000\000\000\156" "\000\000\000\157"
- /* 0x70 */ "\000\000\000\160" "\000\000\000\161" "\000\000\000\162"
- /* 0x73 */ "\000\000\000\163" "\000\000\000\164" "\000\000\000\165"
- /* 0x76 */ "\000\000\000\166" "\000\000\000\167" "\000\000\000\170"
- /* 0x79 */ "\000\000\000\171" "\000\000\000\172" "\000\000\000\173"
- /* 0x7c */ "\000\000\000\174" "\000\000\000\175" "\000\000\000\176"
- /* 0x7f */ "\000\000\000\177" "\000\000\000\200" "\000\000\000\201"
- /* 0x82 */ "\000\000\000\202" "\000\000\000\203" "\000\000\000\204"
- /* 0x85 */ "\000\000\000\205" "\000\000\000\206" "\000\000\000\207"
- /* 0x88 */ "\000\000\000\210" "\000\000\000\211" "\000\000\000\212"
- /* 0x8b */ "\000\000\000\213" "\000\000\000\214" "\000\000\000\215"
- /* 0x8e */ "\000\000\000\216" "\000\000\000\217" "\000\000\000\220"
- /* 0x91 */ "\000\000\000\221" "\000\000\000\222" "\000\000\000\223"
- /* 0x94 */ "\000\000\000\224" "\000\000\000\225" "\000\000\000\226"
- /* 0x97 */ "\000\000\000\227" "\000\000\000\230" "\000\000\000\231"
- /* 0x9a */ "\000\000\000\232" "\000\000\000\233" "\000\000\000\234"
- /* 0x9d */ "\000\000\000\235" "\000\000\000\236" "\000\000\000\237"
- /* 0xa0 */ "\000\000\000\240" "\000\000\000\241" "\000\000\000\242"
- /* 0xa3 */ "\000\000\000\243" "\000\000\000\244" "\000\000\000\245"
- /* 0xa6 */ "\000\000\000\246" "\000\000\000\247" "\000\000\000\250"
- /* 0xa9 */ "\000\000\000\251" "\000\000\000\252" "\000\000\000\253"
- /* 0xac */ "\000\000\000\254" "\000\000\000\255" "\000\000\000\256"
- /* 0xaf */ "\000\000\000\257" "\000\000\000\260" "\000\000\000\261"
- /* 0xb2 */ "\000\000\000\262" "\000\000\000\263" "\000\000\000\264"
- /* 0xb5 */ "\000\000\000\265" "\000\000\000\266" "\000\000\000\267"
- /* 0xb8 */ "\000\000\000\270" "\000\000\000\271" "\000\000\000\272"
- /* 0xbb */ "\000\000\000\273" "\000\000\000\274" "\000\000\000\275"
- /* 0xbe */ "\000\000\000\276" "\000\000\000\277" "\000\000\000\300"
- /* 0xc1 */ "\000\000\000\301" "\000\000\000\302" "\000\000\000\303"
- /* 0xc4 */ "\000\000\000\304" "\000\000\000\305" "\000\000\000\306"
- /* 0xc7 */ "\000\000\000\307" "\000\000\000\310" "\000\000\000\311"
- /* 0xca */ "\000\000\000\312" "\000\000\000\313" "\000\000\000\314"
- /* 0xcd */ "\000\000\000\315" "\000\000\000\316" "\000\000\000\317"
- /* 0xd0 */ "\000\000\000\320" "\000\000\000\321" "\000\000\000\322"
- /* 0xd3 */ "\000\000\000\323" "\000\000\000\324" "\000\000\000\325"
- /* 0xd6 */ "\000\000\000\326" "\000\000\000\327" "\000\000\000\330"
- /* 0xd9 */ "\000\000\000\331" "\000\000\000\332" "\000\000\000\333"
- /* 0xdc */ "\000\000\000\334" "\000\000\000\335" "\000\000\000\336"
- /* 0xdf */ "\000\000\000\337" "\000\000\000\340" "\000\000\000\341"
- /* 0xe2 */ "\000\000\000\342" "\000\000\000\343" "\000\000\000\344"
- /* 0xe5 */ "\000\000\000\345" "\000\000\000\346" "\000\000\000\347"
- /* 0xe8 */ "\000\000\000\350" "\000\000\000\351" "\000\000\000\352"
- /* 0xeb */ "\000\000\000\353" "\000\000\000\354" "\000\000\000\355"
- /* 0xee */ "\000\000\000\356" "\000\000\000\357" "\000\000\000\360"
- /* 0xf1 */ "\000\000\000\361" "\000\000\000\362" "\000\000\000\363"
- /* 0xf4 */ "\000\000\000\364" "\000\000\000\365" "\000\000\000\366"
- /* 0xf7 */ "\000\000\000\367" "\000\000\000\370" "\000\000\000\371"
- /* 0xfa */ "\000\000\000\372" "\000\000\000\373" "\000\000\000\374"
- /* 0xfd */ "\000\000\000\375" "\000\000\000\376" "\000\000\000\377"
-;
-const char _nl_C_LC_CTYPE_names[1024] =
- /* 0x00 */ "\000\000\000\000" "\000\000\000\001" "\000\000\000\002"
- /* 0x03 */ "\000\000\000\003" "\000\000\000\004" "\000\000\000\005"
- /* 0x06 */ "\000\000\000\006" "\000\000\000\007" "\000\000\000\010"
- /* 0x09 */ "\000\000\000\011" "\000\000\000\012" "\000\000\000\013"
- /* 0x0c */ "\000\000\000\014" "\000\000\000\015" "\000\000\000\016"
- /* 0x0f */ "\000\000\000\017" "\000\000\000\020" "\000\000\000\021"
- /* 0x12 */ "\000\000\000\022" "\000\000\000\023" "\000\000\000\024"
- /* 0x15 */ "\000\000\000\025" "\000\000\000\026" "\000\000\000\027"
- /* 0x18 */ "\000\000\000\030" "\000\000\000\031" "\000\000\000\032"
- /* 0x1b */ "\000\000\000\033" "\000\000\000\034" "\000\000\000\035"
- /* 0x1e */ "\000\000\000\036" "\000\000\000\037" "\000\000\000\040"
- /* 0x21 */ "\000\000\000\041" "\000\000\000\042" "\000\000\000\043"
- /* 0x24 */ "\000\000\000\044" "\000\000\000\045" "\000\000\000\046"
- /* 0x27 */ "\000\000\000\047" "\000\000\000\050" "\000\000\000\051"
- /* 0x2a */ "\000\000\000\052" "\000\000\000\053" "\000\000\000\054"
- /* 0x2d */ "\000\000\000\055" "\000\000\000\056" "\000\000\000\057"
- /* 0x30 */ "\000\000\000\060" "\000\000\000\061" "\000\000\000\062"
- /* 0x33 */ "\000\000\000\063" "\000\000\000\064" "\000\000\000\065"
- /* 0x36 */ "\000\000\000\066" "\000\000\000\067" "\000\000\000\070"
- /* 0x39 */ "\000\000\000\071" "\000\000\000\072" "\000\000\000\073"
- /* 0x3c */ "\000\000\000\074" "\000\000\000\075" "\000\000\000\076"
- /* 0x3f */ "\000\000\000\077" "\000\000\000\100" "\000\000\000\101"
- /* 0x42 */ "\000\000\000\102" "\000\000\000\103" "\000\000\000\104"
- /* 0x45 */ "\000\000\000\105" "\000\000\000\106" "\000\000\000\107"
- /* 0x48 */ "\000\000\000\110" "\000\000\000\111" "\000\000\000\112"
- /* 0x4b */ "\000\000\000\113" "\000\000\000\114" "\000\000\000\115"
- /* 0x4e */ "\000\000\000\116" "\000\000\000\117" "\000\000\000\120"
- /* 0x51 */ "\000\000\000\121" "\000\000\000\122" "\000\000\000\123"
- /* 0x54 */ "\000\000\000\124" "\000\000\000\125" "\000\000\000\126"
- /* 0x57 */ "\000\000\000\127" "\000\000\000\130" "\000\000\000\131"
- /* 0x5a */ "\000\000\000\132" "\000\000\000\133" "\000\000\000\134"
- /* 0x5d */ "\000\000\000\135" "\000\000\000\136" "\000\000\000\137"
- /* 0x60 */ "\000\000\000\140" "\000\000\000\141" "\000\000\000\142"
- /* 0x63 */ "\000\000\000\143" "\000\000\000\144" "\000\000\000\145"
- /* 0x66 */ "\000\000\000\146" "\000\000\000\147" "\000\000\000\150"
- /* 0x69 */ "\000\000\000\151" "\000\000\000\152" "\000\000\000\153"
- /* 0x6c */ "\000\000\000\154" "\000\000\000\155" "\000\000\000\156"
- /* 0x6f */ "\000\000\000\157" "\000\000\000\160" "\000\000\000\161"
- /* 0x72 */ "\000\000\000\162" "\000\000\000\163" "\000\000\000\164"
- /* 0x75 */ "\000\000\000\165" "\000\000\000\166" "\000\000\000\167"
- /* 0x78 */ "\000\000\000\170" "\000\000\000\171" "\000\000\000\172"
- /* 0x7b */ "\000\000\000\173" "\000\000\000\174" "\000\000\000\175"
- /* 0x7e */ "\000\000\000\176" "\000\000\000\177" "\000\000\000\200"
- /* 0x81 */ "\000\000\000\201" "\000\000\000\202" "\000\000\000\203"
- /* 0x84 */ "\000\000\000\204" "\000\000\000\205" "\000\000\000\206"
- /* 0x87 */ "\000\000\000\207" "\000\000\000\210" "\000\000\000\211"
- /* 0x8a */ "\000\000\000\212" "\000\000\000\213" "\000\000\000\214"
- /* 0x8d */ "\000\000\000\215" "\000\000\000\216" "\000\000\000\217"
- /* 0x90 */ "\000\000\000\220" "\000\000\000\221" "\000\000\000\222"
- /* 0x93 */ "\000\000\000\223" "\000\000\000\224" "\000\000\000\225"
- /* 0x96 */ "\000\000\000\226" "\000\000\000\227" "\000\000\000\230"
- /* 0x99 */ "\000\000\000\231" "\000\000\000\232" "\000\000\000\233"
- /* 0x9c */ "\000\000\000\234" "\000\000\000\235" "\000\000\000\236"
- /* 0x9f */ "\000\000\000\237" "\000\000\000\240" "\000\000\000\241"
- /* 0xa2 */ "\000\000\000\242" "\000\000\000\243" "\000\000\000\244"
- /* 0xa5 */ "\000\000\000\245" "\000\000\000\246" "\000\000\000\247"
- /* 0xa8 */ "\000\000\000\250" "\000\000\000\251" "\000\000\000\252"
- /* 0xab */ "\000\000\000\253" "\000\000\000\254" "\000\000\000\255"
- /* 0xae */ "\000\000\000\256" "\000\000\000\257" "\000\000\000\260"
- /* 0xb1 */ "\000\000\000\261" "\000\000\000\262" "\000\000\000\263"
- /* 0xb4 */ "\000\000\000\264" "\000\000\000\265" "\000\000\000\266"
- /* 0xb7 */ "\000\000\000\267" "\000\000\000\270" "\000\000\000\271"
- /* 0xba */ "\000\000\000\272" "\000\000\000\273" "\000\000\000\274"
- /* 0xbd */ "\000\000\000\275" "\000\000\000\276" "\000\000\000\277"
- /* 0xc0 */ "\000\000\000\300" "\000\000\000\301" "\000\000\000\302"
- /* 0xc3 */ "\000\000\000\303" "\000\000\000\304" "\000\000\000\305"
- /* 0xc6 */ "\000\000\000\306" "\000\000\000\307" "\000\000\000\310"
- /* 0xc9 */ "\000\000\000\311" "\000\000\000\312" "\000\000\000\313"
- /* 0xcc */ "\000\000\000\314" "\000\000\000\315" "\000\000\000\316"
- /* 0xcf */ "\000\000\000\317" "\000\000\000\320" "\000\000\000\321"
- /* 0xd2 */ "\000\000\000\322" "\000\000\000\323" "\000\000\000\324"
- /* 0xd5 */ "\000\000\000\325" "\000\000\000\326" "\000\000\000\327"
- /* 0xd8 */ "\000\000\000\330" "\000\000\000\331" "\000\000\000\332"
- /* 0xdb */ "\000\000\000\333" "\000\000\000\334" "\000\000\000\335"
- /* 0xde */ "\000\000\000\336" "\000\000\000\337" "\000\000\000\340"
- /* 0xe1 */ "\000\000\000\341" "\000\000\000\342" "\000\000\000\343"
- /* 0xe4 */ "\000\000\000\344" "\000\000\000\345" "\000\000\000\346"
- /* 0xe7 */ "\000\000\000\347" "\000\000\000\350" "\000\000\000\351"
- /* 0xea */ "\000\000\000\352" "\000\000\000\353" "\000\000\000\354"
- /* 0xed */ "\000\000\000\355" "\000\000\000\356" "\000\000\000\357"
- /* 0xf0 */ "\000\000\000\360" "\000\000\000\361" "\000\000\000\362"
- /* 0xf3 */ "\000\000\000\363" "\000\000\000\364" "\000\000\000\365"
- /* 0xf6 */ "\000\000\000\366" "\000\000\000\367" "\000\000\000\370"
- /* 0xf9 */ "\000\000\000\371" "\000\000\000\372" "\000\000\000\373"
- /* 0xfc */ "\000\000\000\374" "\000\000\000\375" "\000\000\000\376"
- /* 0xff */ "\000\000\000\377"
-;
-#else
-#error "BYTE_ORDER" BYTE_ORDER " not handled."
-#endif
+const u_int32_t _nl_C_LC_CTYPE_toupper[384] =
+{
+ /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xffffffff,
+ /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ /* 0x40 */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ /* 0x48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ /* 0x50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ /* 0x58 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ /* 0x60 */ 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ /* 0x68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ /* 0x70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ /* 0x78 */ 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+const u_int32_t _nl_C_LC_CTYPE_tolower[384] =
+{
+ /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xffffffff,
+ /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ /* 0x40 */ 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ /* 0x48 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ /* 0x50 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ /* 0x58 */ 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ /* 0x60 */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ /* 0x68 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ /* 0x70 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ /* 0x78 */ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+const u_int32_t _nl_C_LC_CTYPE_names[256] =
+{
+ /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ /* 0x40 */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ /* 0x48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ /* 0x50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ /* 0x58 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ /* 0x60 */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ /* 0x68 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ /* 0x70 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ /* 0x78 */ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
const char _nl_C_LC_CTYPE_width[256] =
-/* 0x00 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x10 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x20 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x30 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x40 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x50 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x60 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x70 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x80 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0x90 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xa0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xb0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xc0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xd0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xe0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
-/* 0xf0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x00 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x10 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x20 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x30 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x40 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x50 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x60 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x70 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x80 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0x90 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xa0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xb0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xc0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xd0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xe0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
+ /* 0xf0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"
;
const struct locale_data _nl_C_LC_CTYPE =
@@ -904,14 +340,14 @@ const struct locale_data _nl_C_LC_CTYPE =
#if BYTE_ORDER == LITTLE_ENDIAN
{ string: NULL }, { string: NULL },
#endif
- { string: _nl_C_LC_CTYPE_toupper },
- { string: _nl_C_LC_CTYPE_tolower },
+ { string: (const char *) _nl_C_LC_CTYPE_toupper },
+ { string: (const char *) _nl_C_LC_CTYPE_tolower },
{ string: NULL },
#if BYTE_ORDER == BIG_ENDIAN
{ string: NULL },
#endif
{ string: _nl_C_LC_CTYPE_class32 },
- { string: _nl_C_LC_CTYPE_names },
+ { string: (const char *) _nl_C_LC_CTYPE_names },
#if BYTE_ORDER == BIG_ENDIAN
{ string: NULL },
#endif
diff --git a/locale/Makefile b/locale/Makefile
index c7d00cf..fd7425e 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -23,6 +23,7 @@ subdir := locale
headers = locale.h langinfo.h
distribute = localeinfo.h categories.def iso-4217.def weight.h \
+ strlen-hash.h \
$(addprefix programs/, \
$(localedef-modules:=.c) $(locale-modules:=.c) \
$(lib-modules:=.c) config.h simple-hash.h \
@@ -45,6 +46,7 @@ vpath %.gperf programs
localedef-modules := $(categories:%=ld-%) charmap charset linereader \
locfile stringtrans
+locale-modules := locale-spec
lib-modules := simple-hash xmalloc xstrdup
diff --git a/locale/categories.def b/locale/categories.def
index d3caef2..4caef24 100644
--- a/locale/categories.def
+++ b/locale/categories.def
@@ -43,15 +43,27 @@ DEFINE_CATEGORY
(
LC_COLLATE, "LC_COLLATE",
(
- DEFINE_ELEMENT (_NL_COLLATE_NRULES, "collate-nrules", std, word)
- DEFINE_ELEMENT (_NL_COLLATE_RULES, "collate-rules", std, string)
- DEFINE_ELEMENT (_NL_COLLATE_HASH_SIZE, "collate-hash-size", std, word)
- DEFINE_ELEMENT (_NL_COLLATE_HASH_LAYERS, "collate-hash-layers", std, word)
- DEFINE_ELEMENT (_NL_COLLATE_TABLE_EB, "collate-table-eb", std, string)
- DEFINE_ELEMENT (_NL_COLLATE_TABLE_EL, "collate-table-el", std, string)
- DEFINE_ELEMENT (_NL_COLLATE_UNDEFINED, "collate-undefined", std, word)
- DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EB, "collate-extra-eb", std, string)
- DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EL, "collate-extra-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_NRULES, "collate-nrules", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_RULES, "collate-rules", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_HASH_SIZE, "collate-hash-size", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_HASH_LAYERS, "collate-hash-layers", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_TABLE_EB, "collate-table-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_TABLE_EL, "collate-table-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_UNDEFINED, "collate-undefined", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EB, "collate-extra-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EL, "collate-extra-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_SIZE, "collate-elem-hash-size", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_EB, "collate-elem-hash-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_EL, "collate-elem-hash-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_STR_POOL, "collate-elem-str-pool", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_VAL_EB, "collate-elem-val-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_ELEM_VAL_EL, "collate-elem-val-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_SIZE, "collate-symb-hash-size", std, word)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_EB, "collate-symb-hash-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_EL, "collate-symb-hash-el", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_STR_POOL, "collate-symb-str-pool", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_CLASS_EB, "collate-symb-class-eb", std, string)
+ DEFINE_ELEMENT (_NL_COLLATE_SYMB_CLASS_EL, "collate-symb-class-el", std, string)
), _nl_postload_collate, collate_input, NULL, NULL)
@@ -62,19 +74,20 @@ DEFINE_CATEGORY
(
LC_CTYPE, "LC_CTYPE",
(
- DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EB, "ctype-toupper-eb", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EB, "ctype-tolower-eb", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EL, "ctype-toupper-el", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EL, "ctype-tolower-el", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_NAMES_EB, "ctype-names-eb", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_NAMES_EL, "ctype-names-eb", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_HASH_SIZE, "ctype-hash-size", std, word)
- DEFINE_ELEMENT (_NL_CTYPE_HASH_LAYERS, "ctype-hash-layers", std, word)
- DEFINE_ELEMENT (_NL_CTYPE_CLASS_NAMES, "ctype-class-names", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_MAP_NAMES, "ctype-map-names", std, string)
- DEFINE_ELEMENT (_NL_CTYPE_WIDTH, "ctype-width", std, bytearray)
- DEFINE_ELEMENT (_NL_CTYPE_MB_CUR_MAX, "ctype-mb-cur-max", std, word)
+ DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EB, "ctype-toupper-eb", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EB, "ctype-tolower-eb", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EL, "ctype-toupper-el", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EL, "ctype-tolower-el", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_NAMES_EB, "ctype-names-eb", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_NAMES_EL, "ctype-names-eb", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_HASH_SIZE, "ctype-hash-size", std, word)
+ DEFINE_ELEMENT (_NL_CTYPE_HASH_LAYERS, "ctype-hash-layers", std, word)
+ DEFINE_ELEMENT (_NL_CTYPE_CLASS_NAMES, "ctype-class-names", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_MAP_NAMES, "ctype-map-names", std, string)
+ DEFINE_ELEMENT (_NL_CTYPE_WIDTH, "ctype-width", std, bytearray)
+ DEFINE_ELEMENT (_NL_CTYPE_MB_CUR_MAX, "ctype-mb-cur-max", std, word)
+ DEFINE_ELEMENT (_NL_CTYPE_CODESET_NAME, "ctype-codeset-name", std, string)
), _nl_postload_ctype, ctype_input, ctype_check, ctype_output)
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 4f0a58f..90aee3d 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -115,6 +115,18 @@ typedef enum
_NL_COLLATE_UNDEFINED,
_NL_COLLATE_EXTRA_EB,
_NL_COLLATE_EXTRA_EL,
+ _NL_COLLATE_ELEM_HASH_SIZE,
+ _NL_COLLATE_ELEM_HASH_EB,
+ _NL_COLLATE_ELEM_HASH_EL,
+ _NL_COLLATE_ELEM_STR_POOL,
+ _NL_COLLATE_ELEM_VAL_EB,
+ _NL_COLLATE_ELEM_VAL_EL,
+ _NL_COLLATE_SYMB_HASH_SIZE,
+ _NL_COLLATE_SYMB_HASH_EB,
+ _NL_COLLATE_SYMB_HASH_EL,
+ _NL_COLLATE_SYMB_STR_POOL,
+ _NL_COLLATE_SYMB_CLASS_EB,
+ _NL_COLLATE_SYMB_CLASS_EL,
_NL_NUM_LC_COLLATE,
/* LC_CTYPE category: character classification.
@@ -181,7 +193,7 @@ typedef enum
The string returned will not change until `setlocale' is called;
it is usually in read-only memory and cannot be modified. */
-extern char *nl_langinfo __P ((nl_item item));
+extern char *nl_langinfo __P ((nl_item __item));
__END_DECLS
diff --git a/locale/lc-collate.c b/locale/lc-collate.c
index 23643b2..aefdaa8 100644
--- a/locale/lc-collate.c
+++ b/locale/lc-collate.c
@@ -20,12 +20,28 @@ Boston, MA 02111-1307, USA. */
#include "localeinfo.h"
#include <endian.h>
+
+extern const u_int32_t _nl_C_LC_COLLATE_symbol_hash[];
+extern const char _nl_C_LC_COLLATE_symbol_strings[];
+extern const u_int32_t _nl_C_LC_COLLATE_symbol_classes[];
+
+
_NL_CURRENT_DEFINE (LC_COLLATE);
-const u_int32_t *__collate_table;
-const u_int32_t *__collate_extra;
+const u_int32_t *__collate_table = NULL;
+const u_int32_t *__collate_extra = NULL;
+
+const u_int32_t *__collate_element_hash = NULL;
+const char *__collate_element_strings = NULL;
+const wchar_t *__collate_element_values = NULL;
+const u_int32_t *__collate_symbol_hash = _nl_C_LC_COLLATE_symbol_hash;
+const char *__collate_symbol_strings = _nl_C_LC_COLLATE_symbol_strings;
+const u_int32_t *__collate_symbol_classes = _nl_C_LC_COLLATE_symbol_classes;
+
+/* We are called after loading LC_CTYPE data to load it into
+ the variables used by the collation functions and regex. */
void
_nl_postload_collate (void)
{
@@ -44,4 +60,12 @@ _nl_postload_collate (void)
__collate_table = current (bo (TABLE));
__collate_extra = current (bo (EXTRA));
+
+ __collate_element_hash = current (bo (ELEM_HASH));
+ __collate_element_strings = (const char *) current (ELEM_STR_POOL);
+ __collate_element_values = (const wchar_t *) current (bo (ELEM_VAL));
+
+ __collate_symbol_hash = current (bo (SYMB_HASH));
+ __collate_symbol_strings = (const char *) current (SYMB_STR_POOL);
+ __collate_symbol_classes = current (bo (SYMB_CLASS));
}
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 464f8ba..fa7320a 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
if (W (filedata->nstrings) < _nl_category_num_items[category] ||
(sizeof *filedata + W (filedata->nstrings) * sizeof (unsigned int)
- >= st.st_size))
+ >= (unsigned int) st.st_size))
{
/* Insufficient data. */
errno = EINVAL;
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index d24a9da..7a035c8 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -44,6 +44,7 @@ struct locale_data
unsigned int nstrings; /* Number of strings below. */
union locale_data_value
{
+ const wchar_t *wstr;
const char *string;
unsigned int word;
}
@@ -119,5 +120,11 @@ extern void _nl_free_locale (const struct locale_data *);
/* Global variables for LC_COLLATE category data. */
extern const u_int32_t *__collate_table;
extern const u_int32_t *__collate_extra;
+extern const u_int32_t *__collate_element_hash;
+extern const char *__collate_element_strings;
+extern const wchar_t *__collate_element_values;
+extern const u_int32_t *__collate_symbol_hash;
+extern const char *__collate_symbol_strings;
+extern const u_int32_t *__collate_symbol_classes;
#endif /* localeinfo.h */
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 4bdf0b2..77e9465 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -1,6 +1,6 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
+Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */
#include "locales.h"
#include "simple-hash.h"
#include "stringtrans.h"
+#include "strlen-hash.h"
/* Uncomment the following line in the production version. */
/* #define NDEBUG 1 */
@@ -83,7 +84,7 @@ typedef struct element_t
} element_t;
-/* The real definition of the struct for the LC_CTYPE locale. */
+/* The real definition of the struct for the LC_COLLATE locale. */
struct locale_collate_t
{
/* Collate symbol table. Simple mapping to number. */
@@ -275,15 +276,13 @@ collate_finish (struct localedef_t *locale, struct charset_t *charset)
collate->undefined_len = 2; /* For the name: 1 x wchar_t + L'\0'. */
for (cnt = 0; cnt < collate->nrules; ++cnt)
collate->undefined_len += 1 + collate->undefined.ordering[cnt];
-
- /* Collating symbols are not used anymore. */
- (void) delete_hash (&collate->symbols);
}
void
-collate_output (struct localedef_t *locale, const char *output_path)
+collate_output (struct localedef_t *locale, struct charset_t *charset,
+ const char *output_path)
{
struct locale_collate_t *collate = locale->categories[LC_COLLATE].collate;
u_int32_t table_size, table_best, level_best, sum_best;
@@ -296,10 +295,29 @@ collate_output (struct localedef_t *locale, const char *output_path)
struct locale_file data;
u_int32_t idx[nelems];
struct obstack non_simple;
+ struct obstack string_pool;
size_t cnt, entry_size;
u_int32_t undefined_offset = UINT_MAX;
u_int32_t *table, *extra, *table2, *extra2;
size_t extra_len;
+ u_int32_t element_hash_tab_size;
+ u_int32_t *element_hash_tab;
+ u_int32_t *element_hash_tab_ob;
+ u_int32_t element_string_pool_size;
+ char *element_string_pool;
+ u_int32_t element_value_size;
+ wchar_t *element_value;
+ wchar_t *element_value_ob;
+ u_int32_t symbols_hash_tab_size;
+ u_int32_t *symbols_hash_tab;
+ u_int32_t *symbols_hash_tab_ob;
+ u_int32_t symbols_string_pool_size;
+ char *symbols_string_pool;
+ u_int32_t symbols_class_size;
+ u_int32_t *symbols_class;
+ u_int32_t *symbols_class_ob;
+ hash_table *hash_tab;
+ unsigned int dummy_weights[collate->nrules + 1];
sum_best = UINT_MAX;
table_best = 0xffff;
@@ -342,6 +360,7 @@ Computing table size for collation information might take a while..."),
fputs (_(" done\n"), stderr);
obstack_init (&non_simple);
+ obstack_init (&string_pool);
data.magic = LIMAGIC (LC_COLLATE);
data.n = nelems;
@@ -608,6 +627,258 @@ Computing table size for collation information might take a while..."),
for (cnt = 0; cnt < extra_len / sizeof (u_int32_t); ++cnt)
extra2[cnt] = SWAPU32 (extra2[cnt]);
+ /* We need a simple hashing table to get a collation-element->chars
+ mapping. We again use internal hasing using a secondary hashing
+ function.
+
+ Each string has an associate hashing value V, computed by a
+ fixed function. To locate the string we use open addressing with
+ double hashing. The first index will be V % M, where M is the
+ size of the hashing table. If no entry is found, iterating with
+ a second, independent hashing function takes place. This second
+ value will be 1 + V % (M - 2). The approximate number of probes
+ will be
+
+ for unsuccessful search: (1 - N / M) ^ -1
+ for successful search: - (N / M) ^ -1 * ln (1 - N / M)
+
+ where N is the number of keys.
+
+ If we now choose M to be the next prime bigger than 4 / 3 * N,
+ we get the values 4 and 1.85 resp. Because unsuccesful searches
+ are unlikely this is a good value. Formulas: [Knuth, The Art of
+ Computer Programming, Volume 3, Sorting and Searching, 1973,
+ Addison Wesley] */
+ if (collate->elements.filled == 0)
+ {
+ /* We don't need any element table since there are no collating
+ elements. */
+ element_hash_tab_size = 0;
+ element_hash_tab = NULL;
+ element_hash_tab_ob = NULL;
+ element_string_pool_size = 0;
+ element_string_pool = NULL;
+ element_value_size = 0;
+ element_value = NULL;
+ element_value_ob = NULL;
+ }
+ else
+ {
+ void *ptr; /* Running pointer. */
+ const char *key; /* Key for current bucket. */
+ size_t keylen; /* Length of key data. */
+ const element_t *data; /* Data, i.e., the character sequence. */
+
+ element_hash_tab_size = next_prime ((collate->elements.filled * 4) / 3);
+ if (element_hash_tab_size < 7)
+ /* We need a minimum to make the following code work. */
+ element_hash_tab_size = 7;
+
+ element_hash_tab = obstack_alloc (&non_simple, (2 * element_hash_tab_size
+ * sizeof (u_int32_t)));
+ memset (element_hash_tab, '\377', (2 * element_hash_tab_size
+ * sizeof (u_int32_t)));
+
+ ptr = NULL;
+ while (iterate_table (&collate->elements, &ptr, (const void **) &key,
+ &keylen, (void **) &data) == 0)
+ {
+ size_t hash_val = hash_string (key, keylen);
+ size_t idx = hash_val % element_hash_tab_size;
+
+ if (element_hash_tab[2 * idx] != (~((u_int32_t) 0)))
+ {
+ /* We need the second hashing function. */
+ size_t c = 1 + (hash_val % (element_hash_tab_size - 2));
+
+ do
+ if (idx >= element_hash_tab_size - c)
+ idx -= element_hash_tab_size - c;
+ else
+ idx += c;
+ while (element_hash_tab[2 * idx] != (~((u_int32_t) 0)));
+ }
+
+ element_hash_tab[2 * idx] = obstack_object_size (&non_simple);
+ element_hash_tab[2 * idx + 1] = (obstack_object_size (&string_pool)
+ / sizeof (wchar_t));
+
+ obstack_grow0 (&non_simple, key, keylen);
+ obstack_grow (&string_pool, data->name,
+ (wcslen (data->name) + 1) * sizeof (wchar_t));
+ }
+
+ if (obstack_object_size (&non_simple) % 4 != 0)
+ obstack_blank (&non_simple,
+ 4 - (obstack_object_size (&non_simple) % 4));
+ element_string_pool_size = obstack_object_size (&non_simple);
+ element_string_pool = obstack_finish (&non_simple);
+
+ element_value_size = obstack_object_size (&string_pool);
+ element_value = obstack_finish (&string_pool);
+
+ /* Create the tables for the other byte order. */
+ element_hash_tab_ob = obstack_alloc (&non_simple,
+ (2 * element_hash_tab_size
+ * sizeof (u_int32_t)));
+ for (cnt = 0; cnt < 2 * element_hash_tab_size; ++cnt)
+ element_hash_tab_ob[cnt] = SWAPU32 (element_hash_tab[cnt]);
+
+ element_value_ob = obstack_alloc (&string_pool, element_value_size);
+ if (sizeof (wchar_t) != 4)
+ {
+ fputs ("sizeof (wchar_t) != 4 currently not handled", stderr);
+ abort ();
+ }
+ for (cnt = 0; cnt < element_value_size / 4; ++cnt)
+ element_value_ob[cnt] = SWAPU32 (element_value[cnt]);
+ }
+
+ /* Store collation elements as map to collation class. There are
+ three kinds of symbols:
+ - simple characters
+ - collation elements
+ - collation symbols
+ We need to make a table which lets the user to access the primary
+ weight based on the symbol string. */
+ symbols_hash_tab_size = next_prime ((4 * (charset->char_table.filled
+ + collate->elements.filled
+ + collate->symbols.filled)) / 3);
+ symbols_hash_tab = obstack_alloc (&non_simple, (2 * symbols_hash_tab_size
+ * sizeof (u_int32_t)));
+ memset (symbols_hash_tab, '\377', (2 * symbols_hash_tab_size
+ * sizeof (u_int32_t)));
+
+ /* Now fill the array. First the symbols from the character set,
+ then the collation elements and last the collation symbols. */
+ hash_tab = &charset->char_table;
+ while (1)
+ {
+ void *ptr; /* Running pointer. */
+ const char *key; /* Key for current bucket. */
+ size_t keylen; /* Length of key data. */
+ void *data; /* Data. */
+
+ ptr = NULL;
+ while (iterate_table (hash_tab, &ptr, (const void **) &key,
+ &keylen, (void **) &data) == 0)
+ {
+ size_t hash_val;
+ size_t idx;
+ u_int32_t word;
+ unsigned int *weights;
+
+ if (hash_tab == &charset->char_table
+ || hash_tab == &collate->elements)
+ {
+ element_t *lastp, *firstp;
+ wchar_t dummy_name[2];
+ const wchar_t *name;
+ size_t name_len;
+
+ if (hash_tab == &charset->char_table)
+ {
+ dummy_name[0] = (wchar_t) ((unsigned long int) data);
+ dummy_name[1] = L'\0';
+ name = dummy_name;
+ name_len = sizeof (wchar_t);
+ }
+ else
+ {
+ element_t *elemp = (element_t *) data;
+ name = elemp->name;
+ name_len = wcslen (name) * sizeof (wchar_t);
+ }
+
+ /* First check whether this character is used at all. */
+ if (find_entry (&collate->result, name, name_len,
+ (void *) &firstp) < 0)
+ /* The symbol is not directly mentioned in the collation.
+ I.e., we use the value for UNDEFINED. */
+ lastp = &collate->undefined;
+ else
+ {
+ /* The entry for the simple character is always found at
+ the end. */
+ lastp = firstp;
+ while (lastp->next != NULL && wcscmp (name, lastp->name))
+ lastp = lastp->next;
+ }
+
+ weights = lastp->ordering;
+ }
+ else
+ {
+ dummy_weights[0] = 1;
+ dummy_weights[collate->nrules]
+ = (unsigned int) ((unsigned long int) data);
+
+ weights = dummy_weights;
+ }
+
+ /* In LASTP->ordering we now have the collation class.
+ Determine the place in the hashing table next. */
+ hash_val = hash_string (key, keylen);
+ idx = hash_val % symbols_hash_tab_size;
+
+ if (symbols_hash_tab[2 * idx] != (~((u_int32_t) 0)))
+ {
+ /* We need the second hashing function. */
+ size_t c = 1 + (hash_val % (symbols_hash_tab_size - 2));
+
+ do
+ if (idx >= symbols_hash_tab_size - c)
+ idx -= symbols_hash_tab_size - c;
+ else
+ idx += c;
+ while (symbols_hash_tab[2 * idx] != (~((u_int32_t) 0)));
+ }
+
+ symbols_hash_tab[2 * idx] = obstack_object_size (&string_pool);
+ symbols_hash_tab[2 * idx + 1] = (obstack_object_size (&non_simple)
+ / sizeof (u_int32_t));
+
+ obstack_grow0 (&string_pool, key, keylen);
+ /* Adding the first weight looks complicated. We have to deal
+ with the kind it is stored and with the fact that original
+ form uses `unsigned int's while we need `u_int32_t' here. */
+ word = weights[0];
+ obstack_grow (&non_simple, &word, sizeof (u_int32_t));
+ for (cnt = 0; cnt < weights[0]; ++cnt)
+ {
+ word = weights[collate->nrules + cnt];
+ obstack_grow (&non_simple, &word, sizeof (u_int32_t));
+ }
+ }
+
+ if (hash_tab == &charset->char_table)
+ hash_tab = &collate->elements;
+ else if (hash_tab == &collate->elements)
+ hash_tab = &collate->symbols;
+ else
+ break;
+ }
+
+ /* Now we have the complete tables. */
+ if (obstack_object_size (&string_pool) % 4 != 0)
+ obstack_blank (&non_simple, 4 - (obstack_object_size (&string_pool) % 4));
+ symbols_string_pool_size = obstack_object_size (&string_pool);
+ symbols_string_pool = obstack_finish (&string_pool);
+
+ symbols_class_size = obstack_object_size (&non_simple);
+ symbols_class = obstack_finish (&non_simple);
+
+ /* Generate tables with other byte order. */
+ symbols_hash_tab_ob = obstack_alloc (&non_simple, (2 * symbols_hash_tab_size
+ * sizeof (u_int32_t)));
+ for (cnt = 0; cnt < 2 * symbols_hash_tab_size; ++cnt)
+ symbols_hash_tab_ob[cnt] = SWAPU32 (symbols_hash_tab[cnt]);
+
+ symbols_class_ob = obstack_alloc (&non_simple, symbols_class_size);
+ for (cnt = 0; cnt < symbols_class_size / 4; ++cnt)
+ symbols_class_ob[cnt] = SWAPU32 (symbols_class[cnt]);
+
+
/* Store table adresses and lengths. */
#if __BYTE_ORDER == __BIG_ENDIAN
iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_TABLE_EB)].iov_base = table;
@@ -642,12 +913,124 @@ Computing table size for collation information might take a while..."),
iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_UNDEFINED)].iov_base = &undefined_offset;
iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_UNDEFINED)].iov_len = sizeof (u_int32_t);
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_SIZE)].iov_base
+ = &element_hash_tab_size;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_SIZE)].iov_len
+ = sizeof (u_int32_t);
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_base
+ = element_hash_tab;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_len
+ = 2 * element_hash_tab_size * sizeof (u_int32_t);
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_base
+ = element_hash_tab_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_len
+ = 2 * element_hash_tab_size * sizeof (u_int32_t);
+#else
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_base
+ = element_hash_tab;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_len
+ = 2 * element_hash_tab_size * sizeof (u_int32_t);
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_base
+ = element_hash_tab_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_len
+ = 2 * element_hash_tab_size * sizeof (u_int32_t);
+#endif
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_STR_POOL)].iov_base
+ = element_string_pool;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_STR_POOL)].iov_len
+ = element_string_pool_size;
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_base
+ = element_value;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_len
+ = element_value_size;
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_base
+ = element_value_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_len
+ = element_value_size;
+#else
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_base
+ = element_value;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_len
+ = element_value_size;
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_base
+ = element_value_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_len
+ = element_value_size;
+#endif
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_SIZE)].iov_base
+ = &symbols_hash_tab_size;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_SIZE)].iov_len
+ = sizeof (u_int32_t);
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_base
+ = symbols_hash_tab;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_len
+ = 2 * symbols_hash_tab_size * sizeof (u_int32_t);
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_base
+ = symbols_hash_tab_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_len
+ = 2 * symbols_hash_tab_size * sizeof (u_int32_t);
+#else
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_base
+ = symbols_hash_tab;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_len
+ = 2 * symbols_hash_tab_size * sizeof (u_int32_t);
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_base
+ = symbols_hash_tab_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_len
+ = 2 * symbols_hash_tab_size * sizeof (u_int32_t);
+#endif
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_STR_POOL)].iov_base
+ = symbols_string_pool;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_STR_POOL)].iov_len
+ = symbols_string_pool_size;
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_base
+ = symbols_class;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_CLASS_EB)].iov_len
+ = symbols_class_size;
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_base
+ = symbols_class_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_len
+ = symbols_class_size;
+#else
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_base
+ = symbols_class;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_len
+ = symbols_class_size;
+
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_base
+ = symbols_class_ob;
+ iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_len
+ = symbols_class_size;
+#endif
+
/* Update idx array. */
idx[0] = iov[0].iov_len + iov[1].iov_len;
for (cnt = 1; cnt < nelems; ++cnt)
idx[cnt] = idx[cnt - 1] + iov[1 + cnt].iov_len;
write_locale_data (output_path, "LC_COLLATE", 2 + nelems, iov);
+
+ obstack_free (&non_simple, NULL);
+ obstack_free (&string_pool, NULL);
}
@@ -729,7 +1112,7 @@ collate_element_from (struct linereader *lr, struct localedef_t *locale,
if (elemp->name[0] == L'\0' || elemp->name[1] == L'\0')
{
- lr_error (lr, _("illegal colltion element"));
+ lr_error (lr, _("illegal collation element"));
return;
}
@@ -762,8 +1145,7 @@ collate_element_from (struct linereader *lr, struct localedef_t *locale,
{
if (set_entry (&collate->result, elemp->name, sizeof (wchar_t),
elemp) < 0)
- error (EXIT_FAILURE, 0,
- _("\
+ error (EXIT_FAILURE, 0, _("\
error while inserting collation element into hash table"));
}
else
@@ -1019,7 +1401,7 @@ line before ellipsis does not contain definition for character constant"));
}
/* Now it's time to handle the ellipsis in the previous line. We do
- this only when the last line contained an definition for an
+ this only when the last line contained an definition for a
character, the current line also defines an character, the
character code for the later is bigger than the former. */
if (collate->was_ellipsis)
diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
index 0ca3af5..196f990 100644
--- a/locale/programs/ld-ctype.c
+++ b/locale/programs/ld-ctype.c
@@ -387,8 +387,8 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset,
{
#define CTYPE_DATA(name, base, len) \
case _NL_ITEM_INDEX (name): \
- iov[2 + elem + offset].iov_base = base; \
- iov[2 + elem + offset].iov_len = len; \
+ iov[2 + elem + offset].iov_base = (base); \
+ iov[2 + elem + offset].iov_len = (len); \
if (elem + 1 < nelems) \
idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; \
break
@@ -443,9 +443,9 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset,
= strlen (ctype->classnames[cnt]) + 1;
total += iov[2 + elem + offset].iov_len;
}
- iov[2 + elem + offset].iov_base = (void *) "";
- iov[2 + elem + offset].iov_len = 1;
- ++total;
+ iov[2 + elem + offset].iov_base = (void *) "\0\0\0";
+ iov[2 + elem + offset].iov_len = 1 + (4 - ((total + 1) % 4));
+ total += 1 + (4 - ((total + 1) % 4));
if (elem + 1 < nelems)
idx[elem + 1] = idx[elem] + total;
@@ -462,9 +462,9 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset,
= strlen (ctype->mapnames[cnt]) + 1;
total += iov[2 + elem + offset].iov_len;
}
- iov[2 + elem + offset].iov_base = (void *) "";
- iov[2 + elem + offset].iov_len = 1;
- ++total;
+ iov[2 + elem + offset].iov_base = (void *) "\0\0\0";
+ iov[2 + elem + offset].iov_len = 1 + (4 - ((total + 1) % 4));
+ total += 1 + (4 - ((total + 1) % 4));
if (elem + 1 < nelems)
idx[elem + 1] = idx[elem] + total;
@@ -476,8 +476,21 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset,
CTYPE_DATA (_NL_CTYPE_MB_CUR_MAX,
&ctype->mb_cur_max, sizeof (u_int32_t));
- CTYPE_DATA (_NL_CTYPE_CODESET_NAME,
- ctype->codeset_name, strlen (ctype->codeset_name) + 1);
+ case _NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME):
+ total = strlen (ctype->codeset_name) + 1;
+ if (total % 4 == 0)
+ iov[2 + elem + offset].iov_base = (char *) ctype->codeset_name;
+ else
+ {
+ iov[2 + elem + offset].iov_base = alloca ((total + 3) & ~3);
+ memcpy (iov[2 + elem + offset].iov_base, ctype->codeset_name,
+ total);
+ total = (total + 3) & ~3;
+ }
+ iov[2 + elem + offset].iov_len = total;
+ if (elem + 1 < nelems)
+ idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len;
+ break;
default:
assert (! "unknown CTYPE element");
diff --git a/locale/programs/locale-spec.c b/locale/programs/locale-spec.c
index e408421..c595524 100644
--- a/locale/programs/locale-spec.c
+++ b/locale/programs/locale-spec.c
@@ -92,4 +92,37 @@ locale_special (const char *name, int show_category_name,
putchar ('\n');
return;
}
+
+ if (strcmp (name, "collate-classes") == 0)
+ {
+ size_t nelem = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZE);
+ size_t cnt;
+ int first = 1;
+
+ if (show_category_name)
+ puts ("LC_COLLATE");
+ if (show_keyword_name)
+ fputs ("collate-classes=", stdout);
+
+ for (cnt = 0; cnt < nelem; ++cnt)
+ if (__collate_symbol_hash[2 * cnt] != 0xffffffff)
+ {
+ printf ("%s<%s>", first ? "" : ",",
+ &__collate_symbol_strings[__collate_symbol_hash[2 * cnt]]);
+#if 1
+ {
+ size_t idx = __collate_symbol_hash[2 * cnt + 1];
+ size_t cls;
+
+ putchar ('=');
+ for (cls = 0; cls < __collate_symbol_classes[idx]; ++cls)
+ printf ("%s%d", cls == 0 ? "" : ":",
+ __collate_symbol_classes[idx + 1 + cls]);
+ }
+#endif
+ first = 0;
+ }
+ putchar ('\n');
+ return;
+ }
}
diff --git a/locale/programs/locales.h b/locale/programs/locales.h
index 9fe85e9..95e166e 100644
--- a/locale/programs/locales.h
+++ b/locale/programs/locales.h
@@ -122,7 +122,8 @@ void collate_startup (struct linereader *lr, struct localedef_t *locale,
void collate_finish (struct localedef_t *locale,
struct charset_t *charset);
-void collate_output (struct localedef_t *locale, const char *output_path);
+void collate_output (struct localedef_t *locale, struct charset_t *charset,
+ const char *output_path);
void collate_element_to (struct linereader *lr, struct localedef_t *locale,
struct token *code, struct charset_t *charset);
diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
index 436df2e..63ebc4b 100644
--- a/locale/programs/locfile.c
+++ b/locale/programs/locfile.c
@@ -919,7 +919,7 @@ write_all_categories (struct localedef_t *locale, struct charset_t *charset,
{
/* Call all functions to write locale data. */
ctype_output (locale, charset, output_path);
- collate_output (locale, output_path);
+ collate_output (locale, charset, output_path);
monetary_output (locale, output_path);
numeric_output (locale, output_path);
time_output (locale, output_path);
@@ -943,13 +943,31 @@ write_locale_data (const char *output_path, const char *category,
But for LC_MESSAGES we have to take care for the translation
data. This means we need to have a directory LC_MESSAGES in
which we place the file under the name SYS_LC_MESSAGES. */
+ sprintf (fname, "%s%s", output_path, category);
if (strcmp (category, "LC_MESSAGES") == 0)
- fd = -1;
- else
{
- sprintf (fname, "%s%s", output_path, category);
- fd = creat (fname, 0666);
+ struct stat st;
+
+ if (stat (fname, &st) < 0)
+ {
+ if (mkdir (fname, 0777) < 0)
+ fd = creat (fname, 0666);
+ else
+ {
+ fd = -1;
+ errno = EISDIR;
+ }
+ }
+ else if (S_ISREG (st.st_mode))
+ fd = creat (fname, 0666);
+ else
+ {
+ fd = -1;
+ errno = EISDIR;
+ }
}
+ else
+ fd = creat (fname, 0666);
if (fd == -1)
{
@@ -965,8 +983,9 @@ write_locale_data (const char *output_path, const char *category,
if (fd == -1)
{
- error (0, save_err, _("cannot open output file for category `%s'"),
- category);
+ error (0, save_err, _("\
+cannot open output file `%s' for category `%s'"),
+ fname, category);
return;
}
}
diff --git a/locale/setlocale.c b/locale/setlocale.c
index a32fab3..4a9f785 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -279,7 +279,7 @@ setlocale (int category, const char *locale)
while ((cp = strchr (np, '=')) != NULL)
{
for (cnt = 0; cnt < LC_ALL; ++cnt)
- if (cp - np == _nl_category_name_sizes[cnt]
+ if ((size_t) (cp - np) == _nl_category_name_sizes[cnt]
&& memcmp (np, _nl_category_names[cnt], cp - np) == 0)
break;
diff --git a/locale/strlen-hash.h b/locale/strlen-hash.h
new file mode 100644
index 0000000..dba56df
--- /dev/null
+++ b/locale/strlen-hash.h
@@ -0,0 +1,51 @@
+/* strlen-hash - Implements hashing function for string with known length.
+Copyright (C) 1996 Free Software Foundation, Inc.
+Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <sys/types.h>
+
+/* We assume to have `size_t' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+static size_t hash_string (const char *__str_param, size_t __len);
+
+static inline size_t
+hash_string (const char *str_param, size_t len)
+{
+ size_t hval, g;
+ const char *end_str = str_param + len;
+
+ /* Compute the hash value for the given string. */
+ hval = len;
+ while (str_param != end_str)
+ {
+ hval <<= 4;
+ hval += (size_t) *str_param++;
+ g = hval & ((size_t) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}