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.
This commit is contained in:
Roland McGrath 1996-07-29 03:49:00 +00:00
parent cddcfecfd1
commit ce7a5ef4bc
24 changed files with 992 additions and 792 deletions

View file

@ -1,3 +1,67 @@
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.
Sat Jul 27 13:02:09 1996 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (dl_main): Ignore arguments when environment variable

View file

@ -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
}
};

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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));
}

View file

@ -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;

View file

@ -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 */

View file

@ -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)

View file

@ -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");

View file

@ -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;
}
}

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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;

51
locale/strlen-hash.h Normal file
View file

@ -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;
}

View file

@ -92,6 +92,7 @@ extern char *strdup __P ((__const char *__s));
/* Return a malloc'd copy of at most N bytes of STRING. The
resultant string is terminated even if no null terminator
appears before STRING[N]. */
extern char *__strndup __P ((__const char *__string, size_t __n));
extern char *strndup __P ((__const char *__string, size_t __n));
#if defined (__USE_GNU) && defined (__GNUC__)

View file

@ -28,11 +28,6 @@
* Mountain View, California 94043
*/
#ifndef _RPC_PMAP_CLNT_H
#define _RPC_PMAP_CLNT_H 1
#include <features.h>
/*
* pmap_clnt.h
* Supplies C routines to get to portmap services.

View file

@ -36,12 +36,6 @@
* Copyright (C) 1984, Sun Microsystems, Inc.
*/
#ifndef _RPC_RPC_MSG_H
#define _RPC_RPC_MSG_H 1
#include <features.h>
#define RPC_MSG_VERSION ((u_long) 2)
#define RPC_SERVICE_PORT ((u_short) 2048)

View file

@ -32,7 +32,8 @@ extern int _dl_argc;
extern char **_dl_argv;
extern char **_environ;
extern void _start (void);
extern int _dl_secure;
int __libc_enable_secure;
ElfW(Addr)
_dl_sysdep_start (void **start_argptr,

View file

@ -43,6 +43,8 @@ extern int _dl_argc;
extern char **_dl_argv;
extern char **_environ;
int __libc_enable_secure;
struct hurd_startup_data *_dl_hurd_data;
unsigned int __hurd_threadvar_max = _HURD_THREADVAR_MAX;

View file

@ -9,7 +9,7 @@ test $stdio = default && stdio=libio
# existing system library, because we are the only system library.
inhibit_glue=yes
define([LIBC_LINUX_VERSION],[2.0.3])dnl
define([LIBC_LINUX_VERSION],[2.0.10])dnl
define([libc_cv_linuxVER], [libc_cv_linux]patsubst(LIBC_LINUX_VERSION,[\.]))dnl
AC_CACHE_CHECK(installed Linux kernel header files, libc_cv_linuxVER, [dnl
AC_TRY_COMPILE([#include <linux/version.h>],

View file

@ -339,7 +339,7 @@ strftime (s, maxsize, format, tp)
/* Format the number according to the PAD flag. */
register char *nf = &number_fmt[1];
int printed;
int printed = maxdigits;
switch (pad)
{

View file

@ -30,7 +30,6 @@ static mbstate_t internal;
size_t
mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
{
wchar_t to_wide;
size_t used = 0;
if (ps == NULL)