Sun Mar 5 19:40:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>

* locale/localeinfo.h: Rewritten for new locale system, using
	locale data files and with <langinfo.h> interface.
	* locale/setlocale.c: Rewritten to use locale data files.
	* langinfo.h: New file.
        * locale/langinfo.h: New file.
        * locale/nl_langinfo.c: New file.
        * locale/loadlocale.c: New file.
        * locale/lc-ctype.c: New file.
        * locale/lc-messages.c: New file.
        * locale/lc-monetary.c: New file.
        * locale/lc-numeric.c: New file.
        * locale/lc-time.c: New file.
        * locale/categories.def: New file.
	* locale/Makefile (headers): Remove localeinfo.h.
	(distribute): New variable; put localeinfo.h here, and categories.def.
	(routines): Add loadlocale.
	(categories): New variable.
	(aux): Use that to get C-category and lc-category.
	* ctype/ctype.h (_IS*): Use independent bits for all but _ISalnum.
	* locale/C-ctype.c, locale/C-messages.c: New files.
 	* locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c:
	Default "C" locale data updated for new locale system.
	* locale/C-collate.c: File removed.
        * locale/C-ctype_ct.c: File removed.
        * locale/C-ctype_mb.c: File removed.
        * locale/C-response.c: File removed.
	* locale/localeconv.c: Use _NL_CURRENT macro to access locale data.
	* stdio/printf_fp.c, stdio/vfprintf.c, stdio/vfscanf.c,
	  stdlib/strtod.c, time/asctime.c, time/strftime.c:
	Include ../locale/localeinfo.h and use _NL_CURRENT macro to access
	locale data.
	* time/localtime.c: Don't include <localeinfo.h>.
	* time/tzset.c: Don't use locale items for default TZ value or
	"GMT" string (use "UTC").

	* stdio/vfprintf.c [USE_IN_LIBIO] (PAD): Only call the function if
 	WIDTH>0; update DONE.

	* malloc/malloc.c (morecore): Fix last change to calculate by
 	blocks instead of bytes.
This commit is contained in:
Roland McGrath 1995-03-06 03:00:08 +00:00
parent 6408bdde65
commit 933e73facc
33 changed files with 1635 additions and 1187 deletions

View File

@ -1,3 +1,46 @@
Sun Mar 5 19:40:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* locale/localeinfo.h: Rewritten for new locale system, using
locale data files and with <langinfo.h> interface.
* locale/setlocale.c: Rewritten to use locale data files.
* langinfo.h: New file.
* locale/langinfo.h: New file.
* locale/nl_langinfo.c: New file.
* locale/loadlocale.c: New file.
* locale/lc-ctype.c: New file.
* locale/lc-messages.c: New file.
* locale/lc-monetary.c: New file.
* locale/lc-numeric.c: New file.
* locale/lc-time.c: New file.
* locale/categories.def: New file.
* locale/Makefile (headers): Remove localeinfo.h.
(distribute): New variable; put localeinfo.h here, and categories.def.
(routines): Add loadlocale.
(categories): New variable.
(aux): Use that to get C-category and lc-category.
* ctype/ctype.h (_IS*): Use independent bits for all but _ISalnum.
* locale/C-ctype.c, locale/C-messages.c: New files.
* locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c:
Default "C" locale data updated for new locale system.
* locale/C-collate.c: File removed.
* locale/C-ctype_ct.c: File removed.
* locale/C-ctype_mb.c: File removed.
* locale/C-response.c: File removed.
* locale/localeconv.c: Use _NL_CURRENT macro to access locale data.
* stdio/printf_fp.c, stdio/vfprintf.c, stdio/vfscanf.c,
stdlib/strtod.c, time/asctime.c, time/strftime.c:
Include ../locale/localeinfo.h and use _NL_CURRENT macro to access
locale data.
* time/localtime.c: Don't include <localeinfo.h>.
* time/tzset.c: Don't use locale items for default TZ value or
"GMT" string (use "UTC").
* stdio/vfprintf.c [USE_IN_LIBIO] (PAD): Only call the function if
WIDTH>0; update DONE.
* malloc/malloc.c (morecore): Fix last change to calculate by
blocks instead of bytes.
Fri Mar 3 12:24:52 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/sys/mman.h (__mmap, __munmap): Declare these.

View File

@ -34,20 +34,21 @@ __BEGIN_DECLS
many things must be changed that use `unsigned short int's. */
enum
{
_ISupper = 1 << 0, /* UPPERCASE. */
_ISlower = 1 << 1, /* lowercase. */
_IScntrl = 1 << 2, /* Control character. */
_ISdigit = 1 << 3, /* Numeric. */
_ISspace = 1 << 4, /* Whitespace. */
_IShex = 1 << 5, /* A - F, a - f. */
_ISpunct = 1 << 6, /* Punctuation. */
_NOgraph = 1 << 7, /* Printing but nongraphical. */
_ISblank = 1 << 8, /* Blank (usually SPC and TAB). */
_ISalpha = 1 << 9, /* Alphabetic. */
_ISalnum = _ISalpha | _ISdigit, /* Alphanumeric. */
_ISxdigit = _ISdigit | _IShex, /* Hexadecimal numeric. */
_ISgraph = _ISalnum | _ISpunct, /* Graphical. */
_ISprint = _ISgraph | _NOgraph /* Printing. */
_ISupper = 1 << 0, /* UPPERCASE. */
_ISlower = 1 << 1, /* lowercase. */
_ISalpha = 1 << 2, /* Alphabetic. */
_ISdigit = 1 << 3, /* Numeric. */
_ISxdigit = 1 << 4, /* Hexadecimal numeric. */
_ISspace = 1 << 5, /* Whitespace. */
_ISprint = 1 << 6, /* Printing. */
_ISgraph = 1 << 7, /* Graphical. */
_ISblank = 1 << 8, /* Blank (usually SPC and TAB). */
_IScntrl = 1 << 9, /* Control character. */
_ISpunct = 1 << 10, /* Punctuation. */
/* The following are defined in POSIX.2 as being combinations of the
classes above. */
_ISalnum = _ISalpha | _ISdigit /* Alphanumeric. */
};
/* These are defined in localeinfo.c.
@ -115,7 +116,7 @@ extern int toascii __P ((int __c));
#endif /* Use SVID or use misc. */
#ifdef __USE_SVID
/* These are the same as `toupper' and and `tolower'. */
/* These are the same as `toupper' and `tolower'. */
__exctype (_toupper);
__exctype (_tolower);
#endif

1
langinfo.h Normal file
View File

@ -0,0 +1 @@
#include <locale/langinfo.h>

View File

@ -1,7 +0,0 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
CONST struct collate_info __collate_C = { 0, NULL, NULL, NULL };
CONST struct collate_info *_collate_info = &__collate_C;

View File

@ -1,14 +1,292 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
/* Generated by GNU locale 0.1.
Copyright (C) 1995 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. */
#include "localeinfo.h"
#include <endian.h>
#if BYTE_ORDER == BIG_ENDIAN
const char _nl_C_LC_CTYPE_class[] =
/* 0x00 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x06 */ "\004\000" "\004\000" "\004\000" "\024\001" "\024\000" "\024\000"
/* 0x0c */ "\024\000" "\024\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x12 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x18 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x1e */ "\004\000" "\004\000" "\220\001" "\100\000" "\100\000" "\100\000"
/* 0x24 */ "\100\000" "\100\000" "\100\000" "\100\000" "\100\000" "\100\000"
/* 0x2a */ "\100\000" "\100\000" "\100\000" "\100\000" "\100\000" "\100\000"
/* 0x30 */ "\050\000" "\050\000" "\050\000" "\050\000" "\050\000" "\050\000"
/* 0x36 */ "\050\000" "\050\000" "\050\000" "\050\000" "\100\000" "\100\000"
/* 0x3c */ "\100\000" "\100\000" "\100\000" "\100\000" "\100\000" "\041\000"
/* 0x42 */ "\041\000" "\041\000" "\041\000" "\041\000" "\041\000" "\001\000"
/* 0x48 */ "\001\000" "\001\000" "\001\000" "\001\000" "\001\000" "\001\000"
/* 0x4e */ "\001\000" "\001\000" "\001\000" "\001\000" "\001\000" "\001\000"
/* 0x54 */ "\001\000" "\001\000" "\001\000" "\001\000" "\001\000" "\001\000"
/* 0x5a */ "\001\000" "\100\000" "\100\000" "\100\000" "\100\000" "\100\000"
/* 0x60 */ "\100\000" "\042\000" "\042\000" "\042\000" "\042\000" "\042\000"
/* 0x66 */ "\042\000" "\002\000" "\002\000" "\002\000" "\002\000" "\002\000"
/* 0x6c */ "\002\000" "\002\000" "\002\000" "\002\000" "\002\000" "\002\000"
/* 0x72 */ "\002\000" "\002\000" "\002\000" "\002\000" "\002\000" "\002\000"
/* 0x78 */ "\002\000" "\002\000" "\002\000" "\100\000" "\100\000" "\100\000"
/* 0x7e */ "\100\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x84 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x8a */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x90 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x96 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0x9c */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xa2 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xa8 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xae */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xb4 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xba */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xc0 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xc6 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xcc */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xd2 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xd8 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xde */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xe4 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xea */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xf0 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xf6 */ "\004\000" "\004\000" "\004\000" "\004\000" "\004\000" "\004\000"
/* 0xfc */ "\004\000" "\004\000" "\004\000" "\004\000";
const char _nl_C_LC_CTYPE_toupper[] =
/* 0x00 */ "\000\000" "\001\000" "\002\000" "\003\000" "\004\000" "\005\000"
/* 0x06 */ "\006\000" "\007\000" "\010\000" "\011\000" "\012\000" "\013\000"
/* 0x0c */ "\014\000" "\015\000" "\016\000" "\017\000" "\020\000" "\021\000"
/* 0x12 */ "\022\000" "\023\000" "\024\000" "\025\000" "\026\000" "\027\000"
/* 0x18 */ "\030\000" "\031\000" "\032\000" "\033\000" "\034\000" "\035\000"
/* 0x1e */ "\036\000" "\037\000" "\040\000" "\041\000" "\042\000" "\043\000"
/* 0x24 */ "\044\000" "\045\000" "\046\000" "\047\000" "\050\000" "\051\000"
/* 0x2a */ "\052\000" "\053\000" "\054\000" "\055\000" "\056\000" "\057\000"
/* 0x30 */ "\060\000" "\061\000" "\062\000" "\063\000" "\064\000" "\065\000"
/* 0x36 */ "\066\000" "\067\000" "\070\000" "\071\000" "\072\000" "\073\000"
/* 0x3c */ "\074\000" "\075\000" "\076\000" "\077\000" "\100\000" "\101\000"
/* 0x42 */ "\102\000" "\103\000" "\104\000" "\105\000" "\106\000" "\107\000"
/* 0x48 */ "\110\000" "\111\000" "\112\000" "\113\000" "\114\000" "\115\000"
/* 0x4e */ "\116\000" "\117\000" "\120\000" "\121\000" "\122\000" "\123\000"
/* 0x54 */ "\124\000" "\125\000" "\126\000" "\127\000" "\130\000" "\131\000"
/* 0x5a */ "\132\000" "\133\000" "\134\000" "\135\000" "\136\000" "\137\000"
/* 0x60 */ "\140\000" "\101\000" "\102\000" "\103\000" "\104\000" "\105\000"
/* 0x66 */ "\106\000" "\107\000" "\110\000" "\111\000" "\112\000" "\113\000"
/* 0x6c */ "\114\000" "\115\000" "\116\000" "\117\000" "\120\000" "\121\000"
/* 0x72 */ "\122\000" "\123\000" "\124\000" "\125\000" "\126\000" "\127\000"
/* 0x78 */ "\130\000" "\131\000" "\132\000" "\173\000" "\174\000" "\175\000"
/* 0x7e */ "\176\000" "\177\000" "\200\000" "\201\000" "\202\000" "\203\000"
/* 0x84 */ "\204\000" "\205\000" "\206\000" "\207\000" "\210\000" "\211\000"
/* 0x8a */ "\212\000" "\213\000" "\214\000" "\215\000" "\216\000" "\217\000"
/* 0x90 */ "\220\000" "\221\000" "\222\000" "\223\000" "\224\000" "\225\000"
/* 0x96 */ "\226\000" "\227\000" "\230\000" "\231\000" "\232\000" "\233\000"
/* 0x9c */ "\234\000" "\235\000" "\236\000" "\237\000" "\240\000" "\241\000"
/* 0xa2 */ "\242\000" "\243\000" "\244\000" "\245\000" "\246\000" "\247\000"
/* 0xa8 */ "\250\000" "\251\000" "\252\000" "\253\000" "\254\000" "\255\000"
/* 0xae */ "\256\000" "\257\000" "\260\000" "\261\000" "\262\000" "\263\000"
/* 0xb4 */ "\264\000" "\265\000" "\266\000" "\267\000" "\270\000" "\271\000"
/* 0xba */ "\272\000" "\273\000" "\274\000" "\275\000" "\276\000" "\277\000"
/* 0xc0 */ "\300\000" "\301\000" "\302\000" "\303\000" "\304\000" "\305\000"
/* 0xc6 */ "\306\000" "\307\000" "\310\000" "\311\000" "\312\000" "\313\000"
/* 0xcc */ "\314\000" "\315\000" "\316\000" "\317\000" "\320\000" "\321\000"
/* 0xd2 */ "\322\000" "\323\000" "\324\000" "\325\000" "\326\000" "\327\000"
/* 0xd8 */ "\330\000" "\331\000" "\332\000" "\333\000" "\334\000" "\335\000"
/* 0xde */ "\336\000" "\337\000" "\340\000" "\341\000" "\342\000" "\343\000"
/* 0xe4 */ "\344\000" "\345\000" "\346\000" "\347\000" "\350\000" "\351\000"
/* 0xea */ "\352\000" "\353\000" "\354\000" "\355\000" "\356\000" "\357\000"
/* 0xf0 */ "\360\000" "\361\000" "\362\000" "\363\000" "\364\000" "\365\000"
/* 0xf6 */ "\366\000" "\367\000" "\370\000" "\371\000" "\372\000" "\373\000"
/* 0xfc */ "\374\000" "\375\000" "\376\000" "\377\000";
const char _nl_C_LC_CTYPE_tolower[] =
/* 0x00 */ "\000\000" "\001\000" "\002\000" "\003\000" "\004\000" "\005\000"
/* 0x06 */ "\006\000" "\007\000" "\010\000" "\011\000" "\012\000" "\013\000"
/* 0x0c */ "\014\000" "\015\000" "\016\000" "\017\000" "\020\000" "\021\000"
/* 0x12 */ "\022\000" "\023\000" "\024\000" "\025\000" "\026\000" "\027\000"
/* 0x18 */ "\030\000" "\031\000" "\032\000" "\033\000" "\034\000" "\035\000"
/* 0x1e */ "\036\000" "\037\000" "\040\000" "\041\000" "\042\000" "\043\000"
/* 0x24 */ "\044\000" "\045\000" "\046\000" "\047\000" "\050\000" "\051\000"
/* 0x2a */ "\052\000" "\053\000" "\054\000" "\055\000" "\056\000" "\057\000"
/* 0x30 */ "\060\000" "\061\000" "\062\000" "\063\000" "\064\000" "\065\000"
/* 0x36 */ "\066\000" "\067\000" "\070\000" "\071\000" "\072\000" "\073\000"
/* 0x3c */ "\074\000" "\075\000" "\076\000" "\077\000" "\100\000" "\141\000"
/* 0x42 */ "\142\000" "\143\000" "\144\000" "\145\000" "\146\000" "\147\000"
/* 0x48 */ "\150\000" "\151\000" "\152\000" "\153\000" "\154\000" "\155\000"
/* 0x4e */ "\156\000" "\157\000" "\160\000" "\161\000" "\162\000" "\163\000"
/* 0x54 */ "\164\000" "\165\000" "\166\000" "\167\000" "\170\000" "\171\000"
/* 0x5a */ "\172\000" "\133\000" "\134\000" "\135\000" "\136\000" "\137\000"
/* 0x60 */ "\140\000" "\141\000" "\142\000" "\143\000" "\144\000" "\145\000"
/* 0x66 */ "\146\000" "\147\000" "\150\000" "\151\000" "\152\000" "\153\000"
/* 0x6c */ "\154\000" "\155\000" "\156\000" "\157\000" "\160\000" "\161\000"
/* 0x72 */ "\162\000" "\163\000" "\164\000" "\165\000" "\166\000" "\167\000"
/* 0x78 */ "\170\000" "\171\000" "\172\000" "\173\000" "\174\000" "\175\000"
/* 0x7e */ "\176\000" "\177\000" "\200\000" "\201\000" "\202\000" "\203\000"
/* 0x84 */ "\204\000" "\205\000" "\206\000" "\207\000" "\210\000" "\211\000"
/* 0x8a */ "\212\000" "\213\000" "\214\000" "\215\000" "\216\000" "\217\000"
/* 0x90 */ "\220\000" "\221\000" "\222\000" "\223\000" "\224\000" "\225\000"
/* 0x96 */ "\226\000" "\227\000" "\230\000" "\231\000" "\232\000" "\233\000"
/* 0x9c */ "\234\000" "\235\000" "\236\000" "\237\000" "\240\000" "\241\000"
/* 0xa2 */ "\242\000" "\243\000" "\244\000" "\245\000" "\246\000" "\247\000"
/* 0xa8 */ "\250\000" "\251\000" "\252\000" "\253\000" "\254\000" "\255\000"
/* 0xae */ "\256\000" "\257\000" "\260\000" "\261\000" "\262\000" "\263\000"
/* 0xb4 */ "\264\000" "\265\000" "\266\000" "\267\000" "\270\000" "\271\000"
/* 0xba */ "\272\000" "\273\000" "\274\000" "\275\000" "\276\000" "\277\000"
/* 0xc0 */ "\300\000" "\301\000" "\302\000" "\303\000" "\304\000" "\305\000"
/* 0xc6 */ "\306\000" "\307\000" "\310\000" "\311\000" "\312\000" "\313\000"
/* 0xcc */ "\314\000" "\315\000" "\316\000" "\317\000" "\320\000" "\321\000"
/* 0xd2 */ "\322\000" "\323\000" "\324\000" "\325\000" "\326\000" "\327\000"
/* 0xd8 */ "\330\000" "\331\000" "\332\000" "\333\000" "\334\000" "\335\000"
/* 0xde */ "\336\000" "\337\000" "\340\000" "\341\000" "\342\000" "\343\000"
/* 0xe4 */ "\344\000" "\345\000" "\346\000" "\347\000" "\350\000" "\351\000"
/* 0xea */ "\352\000" "\353\000" "\354\000" "\355\000" "\356\000" "\357\000"
/* 0xf0 */ "\360\000" "\361\000" "\362\000" "\363\000" "\364\000" "\365\000"
/* 0xf6 */ "\366\000" "\367\000" "\370\000" "\371\000" "\372\000" "\373\000"
/* 0xfc */ "\374\000" "\375\000" "\376\000" "\377\000" ;
#elif BYTE_ORDER == LITTLE_ENDIAN
const char _nl_C_LC_CTYPE_class[] =
/* 0x00 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x06 */ "\000\004" "\000\004" "\000\004" "\001\024" "\000\024" "\000\024"
/* 0x0c */ "\000\024" "\000\024" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x12 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x18 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x1e */ "\000\004" "\000\004" "\001\220" "\000\100" "\000\100" "\000\100"
/* 0x24 */ "\000\100" "\000\100" "\000\100" "\000\100" "\000\100" "\000\100"
/* 0x2a */ "\000\100" "\000\100" "\000\100" "\000\100" "\000\100" "\000\100"
/* 0x30 */ "\000\050" "\000\050" "\000\050" "\000\050" "\000\050" "\000\050"
/* 0x36 */ "\000\050" "\000\050" "\000\050" "\000\050" "\000\100" "\000\100"
/* 0x3c */ "\000\100" "\000\100" "\000\100" "\000\100" "\000\100" "\000\041"
/* 0x42 */ "\000\041" "\000\041" "\000\041" "\000\041" "\000\041" "\000\001"
/* 0x48 */ "\000\001" "\000\001" "\000\001" "\000\001" "\000\001" "\000\001"
/* 0x4e */ "\000\001" "\000\001" "\000\001" "\000\001" "\000\001" "\000\001"
/* 0x54 */ "\000\001" "\000\001" "\000\001" "\000\001" "\000\001" "\000\001"
/* 0x5a */ "\000\001" "\000\100" "\000\100" "\000\100" "\000\100" "\000\100"
/* 0x60 */ "\000\100" "\000\042" "\000\042" "\000\042" "\000\042" "\000\042"
/* 0x66 */ "\000\042" "\000\002" "\000\002" "\000\002" "\000\002" "\000\002"
/* 0x6c */ "\000\002" "\000\002" "\000\002" "\000\002" "\000\002" "\000\002"
/* 0x72 */ "\000\002" "\000\002" "\000\002" "\000\002" "\000\002" "\000\002"
/* 0x78 */ "\000\002" "\000\002" "\000\002" "\000\100" "\000\100" "\000\100"
/* 0x7e */ "\000\100" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x84 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x8a */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x90 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x96 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0x9c */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xa2 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xa8 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xae */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xb4 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xba */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xc0 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xc6 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xcc */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xd2 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xd8 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xde */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xe4 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xea */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xf0 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xf6 */ "\000\004" "\000\004" "\000\004" "\000\004" "\000\004" "\000\004"
/* 0xfc */ "\000\004" "\000\004" "\000\004" "\000\004";
const char _nl_C_LC_CTYPE_toupper[] =
/* 0x00 */ "\000\000" "\000\001" "\000\002" "\000\003" "\000\004" "\000\005"
/* 0x06 */ "\000\006" "\000\007" "\000\010" "\000\011" "\000\012" "\000\013"
/* 0x0c */ "\000\014" "\000\015" "\000\016" "\000\017" "\000\020" "\000\021"
/* 0x12 */ "\000\022" "\000\023" "\000\024" "\000\025" "\000\026" "\000\027"
/* 0x18 */ "\000\030" "\000\031" "\000\032" "\000\033" "\000\034" "\000\035"
/* 0x1e */ "\000\036" "\000\037" "\000\040" "\000\041" "\000\042" "\000\043"
/* 0x24 */ "\000\044" "\000\045" "\000\046" "\000\047" "\000\050" "\000\051"
/* 0x2a */ "\000\052" "\000\053" "\000\054" "\000\055" "\000\056" "\000\057"
/* 0x30 */ "\000\060" "\000\061" "\000\062" "\000\063" "\000\064" "\000\065"
/* 0x36 */ "\000\066" "\000\067" "\000\070" "\000\071" "\000\072" "\000\073"
/* 0x3c */ "\000\074" "\000\075" "\000\076" "\000\077" "\000\100" "\000\101"
/* 0x42 */ "\000\102" "\000\103" "\000\104" "\000\105" "\000\106" "\000\107"
/* 0x48 */ "\000\110" "\000\111" "\000\112" "\000\113" "\000\114" "\000\115"
/* 0x4e */ "\000\116" "\000\117" "\000\120" "\000\121" "\000\122" "\000\123"
/* 0x54 */ "\000\124" "\000\125" "\000\126" "\000\127" "\000\130" "\000\131"
/* 0x5a */ "\000\132" "\000\133" "\000\134" "\000\135" "\000\136" "\000\137"
/* 0x60 */ "\000\140" "\000\101" "\000\102" "\000\103" "\000\104" "\000\105"
/* 0x66 */ "\000\106" "\000\107" "\000\110" "\000\111" "\000\112" "\000\113"
/* 0x6c */ "\000\114" "\000\115" "\000\116" "\000\117" "\000\120" "\000\121"
/* 0x72 */ "\000\122" "\000\123" "\000\124" "\000\125" "\000\126" "\000\127"
/* 0x78 */ "\000\130" "\000\131" "\000\132" "\000\173" "\000\174" "\000\175"
/* 0x7e */ "\000\176" "\000\177" "\000\200" "\000\201" "\000\202" "\000\203"
/* 0x84 */ "\000\204" "\000\205" "\000\206" "\000\207" "\000\210" "\000\211"
/* 0x8a */ "\000\212" "\000\213" "\000\214" "\000\215" "\000\216" "\000\217"
/* 0x90 */ "\000\220" "\000\221" "\000\222" "\000\223" "\000\224" "\000\225"
/* 0x96 */ "\000\226" "\000\227" "\000\230" "\000\231" "\000\232" "\000\233"
/* 0x9c */ "\000\234" "\000\235" "\000\236" "\000\237" "\000\240" "\000\241"
/* 0xa2 */ "\000\242" "\000\243" "\000\244" "\000\245" "\000\246" "\000\247"
/* 0xa8 */ "\000\250" "\000\251" "\000\252" "\000\253" "\000\254" "\000\255"
/* 0xae */ "\000\256" "\000\257" "\000\260" "\000\261" "\000\262" "\000\263"
/* 0xb4 */ "\000\264" "\000\265" "\000\266" "\000\267" "\000\270" "\000\271"
/* 0xba */ "\000\272" "\000\273" "\000\274" "\000\275" "\000\276" "\000\277"
/* 0xc0 */ "\000\300" "\000\301" "\000\302" "\000\303" "\000\304" "\000\305"
/* 0xc6 */ "\000\306" "\000\307" "\000\310" "\000\311" "\000\312" "\000\313"
/* 0xcc */ "\000\314" "\000\315" "\000\316" "\000\317" "\000\320" "\000\321"
/* 0xd2 */ "\000\322" "\000\323" "\000\324" "\000\325" "\000\326" "\000\327"
/* 0xd8 */ "\000\330" "\000\331" "\000\332" "\000\333" "\000\334" "\000\335"
/* 0xde */ "\000\336" "\000\337" "\000\340" "\000\341" "\000\342" "\000\343"
/* 0xe4 */ "\000\344" "\000\345" "\000\346" "\000\347" "\000\350" "\000\351"
/* 0xea */ "\000\352" "\000\353" "\000\354" "\000\355" "\000\356" "\000\357"
/* 0xf0 */ "\000\360" "\000\361" "\000\362" "\000\363" "\000\364" "\000\365"
/* 0xf6 */ "\000\366" "\000\367" "\000\370" "\000\371" "\000\372" "\000\373"
/* 0xfc */ "\000\374" "\000\375" "\000\376" "\000\377" ;
const char _nl_C_LC_CTYPE_tolower[] =
/* 0x00 */ "\000\000" "\000\001" "\000\002" "\000\003" "\000\004" "\000\005"
/* 0x06 */ "\000\006" "\000\007" "\000\010" "\000\011" "\000\012" "\000\013"
/* 0x0c */ "\000\014" "\000\015" "\000\016" "\000\017" "\000\020" "\000\021"
/* 0x12 */ "\000\022" "\000\023" "\000\024" "\000\025" "\000\026" "\000\027"
/* 0x18 */ "\000\030" "\000\031" "\000\032" "\000\033" "\000\034" "\000\035"
/* 0x1e */ "\000\036" "\000\037" "\000\040" "\000\041" "\000\042" "\000\043"
/* 0x24 */ "\000\044" "\000\045" "\000\046" "\000\047" "\000\050" "\000\051"
/* 0x2a */ "\000\052" "\000\053" "\000\054" "\000\055" "\000\056" "\000\057"
/* 0x30 */ "\000\060" "\000\061" "\000\062" "\000\063" "\000\064" "\000\065"
/* 0x36 */ "\000\066" "\000\067" "\000\070" "\000\071" "\000\072" "\000\073"
/* 0x3c */ "\000\074" "\000\075" "\000\076" "\000\077" "\000\100" "\000\141"
/* 0x42 */ "\000\142" "\000\143" "\000\144" "\000\145" "\000\146" "\000\147"
/* 0x48 */ "\000\150" "\000\151" "\000\152" "\000\153" "\000\154" "\000\155"
/* 0x4e */ "\000\156" "\000\157" "\000\160" "\000\161" "\000\162" "\000\163"
/* 0x54 */ "\000\164" "\000\165" "\000\166" "\000\167" "\000\170" "\000\171"
/* 0x5a */ "\000\172" "\000\133" "\000\134" "\000\135" "\000\136" "\000\137"
/* 0x60 */ "\000\140" "\000\141" "\000\142" "\000\143" "\000\144" "\000\145"
/* 0x66 */ "\000\146" "\000\147" "\000\150" "\000\151" "\000\152" "\000\153"
/* 0x6c */ "\000\154" "\000\155" "\000\156" "\000\157" "\000\160" "\000\161"
/* 0x72 */ "\000\162" "\000\163" "\000\164" "\000\165" "\000\166" "\000\167"
/* 0x78 */ "\000\170" "\000\171" "\000\172" "\000\173" "\000\174" "\000\175"
/* 0x7e */ "\000\176" "\000\177" "\000\200" "\000\201" "\000\202" "\000\203"
/* 0x84 */ "\000\204" "\000\205" "\000\206" "\000\207" "\000\210" "\000\211"
/* 0x8a */ "\000\212" "\000\213" "\000\214" "\000\215" "\000\216" "\000\217"
/* 0x90 */ "\000\220" "\000\221" "\000\222" "\000\223" "\000\224" "\000\225"
/* 0x96 */ "\000\226" "\000\227" "\000\230" "\000\231" "\000\232" "\000\233"
/* 0x9c */ "\000\234" "\000\235" "\000\236" "\000\237" "\000\240" "\000\241"
/* 0xa2 */ "\000\242" "\000\243" "\000\244" "\000\245" "\000\246" "\000\247"
/* 0xa8 */ "\000\250" "\000\251" "\000\252" "\000\253" "\000\254" "\000\255"
/* 0xae */ "\000\256" "\000\257" "\000\260" "\000\261" "\000\262" "\000\263"
/* 0xb4 */ "\000\264" "\000\265" "\000\266" "\000\267" "\000\270" "\000\271"
/* 0xba */ "\000\272" "\000\273" "\000\274" "\000\275" "\000\276" "\000\277"
/* 0xc0 */ "\000\300" "\000\301" "\000\302" "\000\303" "\000\304" "\000\305"
/* 0xc6 */ "\000\306" "\000\307" "\000\310" "\000\311" "\000\312" "\000\313"
/* 0xcc */ "\000\314" "\000\315" "\000\316" "\000\317" "\000\320" "\000\321"
/* 0xd2 */ "\000\322" "\000\323" "\000\324" "\000\325" "\000\326" "\000\327"
/* 0xd8 */ "\000\330" "\000\331" "\000\332" "\000\333" "\000\334" "\000\335"
/* 0xde */ "\000\336" "\000\337" "\000\340" "\000\341" "\000\342" "\000\343"
/* 0xe4 */ "\000\344" "\000\345" "\000\346" "\000\347" "\000\350" "\000\351"
/* 0xea */ "\000\352" "\000\353" "\000\354" "\000\355" "\000\356" "\000\357"
/* 0xf0 */ "\000\360" "\000\361" "\000\362" "\000\363" "\000\364" "\000\365"
/* 0xf6 */ "\000\366" "\000\367" "\000\370" "\000\371" "\000\372" "\000\373"
/* 0xfc */ "\000\374" "\000\375" "\000\376" "\000\377" ;
#else
#error "BYTE_ORDER" BYTE_ORDER not handled.
#endif
extern CONST struct ctype_ctype_info __ctype_ctype_C;
extern CONST struct ctype_mbchar_info __ctype_mbchar_C;
CONST struct ctype_info __ctype_C =
{
(struct ctype_ctype_info*)&__ctype_ctype_C,
(struct ctype_mbchar_info*) &__ctype_mbchar_C
};
CONST struct ctype_info *_ctype_info = &__ctype_C;
const struct locale_data _nl_C_LC_CTYPE =
{
NULL, 0, /* no file mapped */
6,
#if BYTE_ORDER == BIG_ENDIAN
_nl_C_LC_CTYPE_class, _nl_C_LC_CTYPE_toupper, _nl_C_LC_CTYPE_tolower,
#endif
NULL, NULL, NULL,
#if BYTE_ORDER == LITTLE_ENDIAN
_nl_C_LC_CTYPE_class, _nl_C_LC_CTYPE_toupper, _nl_C_LC_CTYPE_tolower,
#endif
};

View File

@ -1,793 +0,0 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
#include <ctype.h>
CONST unsigned short int __ctype_b_C[] =
{
0,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl|_ISspace|_ISblank,
_IScntrl|_ISspace,
_IScntrl|_ISspace,
_IScntrl|_ISspace,
_IScntrl|_ISspace,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_ISspace|_NOgraph|_ISblank,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISdigit|_IShex,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper|_IShex,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISalpha|_ISupper,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower|_IShex,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISalpha|_ISlower,
_ISpunct,
_ISpunct,
_ISpunct,
_ISpunct,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
_IScntrl,
};
CONST short int __ctype_tolower_C[] =
{
-1,
0000,
0001,
0002,
0003,
0004,
0005,
0006,
0007,
0010,
0011,
0012,
0013,
0014,
0015,
0016,
0017,
0020,
0021,
0022,
0023,
0024,
0025,
0026,
0027,
0030,
0031,
0032,
0033,
0034,
0035,
0036,
0037,
0040,
'!',
'"',
'#',
'$',
'%',
'&',
'\'',
'(',
')',
'*',
'+',
',',
'-',
'.',
'/',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
':',
';',
'<',
'=',
'>',
'?',
'@',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'[',
'\\',
']',
'^',
'_',
'`',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'{',
'|',
'}',
'~',
0177,
0200,
0201,
0202,
0203,
0204,
0205,
0206,
0207,
0210,
0211,
0212,
0213,
0214,
0215,
0216,
0217,
0220,
0221,
0222,
0223,
0224,
0225,
0226,
0227,
0230,
0231,
0232,
0233,
0234,
0235,
0236,
0237,
0240,
0241,
0242,
0243,
0244,
0245,
0246,
0247,
0250,
0251,
0252,
0253,
0254,
0255,
0256,
0257,
0260,
0261,
0262,
0263,
0264,
0265,
0266,
0267,
0270,
0271,
0272,
0273,
0274,
0275,
0276,
0277,
0300,
0301,
0302,
0303,
0304,
0305,
0306,
0307,
0310,
0311,
0312,
0313,
0314,
0315,
0316,
0317,
0320,
0321,
0322,
0323,
0324,
0325,
0326,
0327,
0330,
0331,
0332,
0333,
0334,
0335,
0336,
0337,
0340,
0341,
0342,
0343,
0344,
0345,
0346,
0347,
0350,
0351,
0352,
0353,
0354,
0355,
0356,
0357,
0360,
0361,
0362,
0363,
0364,
0365,
0366,
0367,
0370,
0371,
0372,
0373,
0374,
0375,
0376,
0377,
};
CONST short int __ctype_toupper_C[] =
{
-1,
0000,
0001,
0002,
0003,
0004,
0005,
0006,
0007,
0010,
0011,
0012,
0013,
0014,
0015,
0016,
0017,
0020,
0021,
0022,
0023,
0024,
0025,
0026,
0027,
0030,
0031,
0032,
0033,
0034,
0035,
0036,
0037,
0040,
'!',
'"',
'#',
'$',
'%',
'&',
'\'',
'(',
')',
'*',
'+',
',',
'-',
'.',
'/',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
':',
';',
'<',
'=',
'>',
'?',
'@',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'[',
'\\',
']',
'^',
'_',
'`',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'{',
'|',
'}',
'~',
0177,
0200,
0201,
0202,
0203,
0204,
0205,
0206,
0207,
0210,
0211,
0212,
0213,
0214,
0215,
0216,
0217,
0220,
0221,
0222,
0223,
0224,
0225,
0226,
0227,
0230,
0231,
0232,
0233,
0234,
0235,
0236,
0237,
0240,
0241,
0242,
0243,
0244,
0245,
0246,
0247,
0250,
0251,
0252,
0253,
0254,
0255,
0256,
0257,
0260,
0261,
0262,
0263,
0264,
0265,
0266,
0267,
0270,
0271,
0272,
0273,
0274,
0275,
0276,
0277,
0300,
0301,
0302,
0303,
0304,
0305,
0306,
0307,
0310,
0311,
0312,
0313,
0314,
0315,
0316,
0317,
0320,
0321,
0322,
0323,
0324,
0325,
0326,
0327,
0330,
0331,
0332,
0333,
0334,
0335,
0336,
0337,
0340,
0341,
0342,
0343,
0344,
0345,
0346,
0347,
0350,
0351,
0352,
0353,
0354,
0355,
0356,
0357,
0360,
0361,
0362,
0363,
0364,
0365,
0366,
0367,
0370,
0371,
0372,
0373,
0374,
0375,
0376,
0377,
};
CONST struct ctype_ctype_info __ctype_ctype_C =
{
(unsigned short int *) __ctype_b_C,
(short int *) __ctype_tolower_C,
(short int *) __ctype_toupper_C
};

View File

@ -1,9 +0,0 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
CONST struct ctype_mbchar_info __ctype_mbchar_C =
{
0, NULL
};

17
locale/C-messages.c Normal file
View File

@ -0,0 +1,17 @@
/* Generated by GNU locale 0.1.
Copyright (C) 1995 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. */
#include "localeinfo.h"
const struct locale_data _nl_C_LC_MESSAGES =
{
NULL, 0, /* no file mapped */
4,
"[yY][[:alpha:]]",
"[nN][[:alpha:]]",
"",
"",
};

View File

@ -1,22 +1,28 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
/* Generated by GNU locale 0.1.
Copyright (C) 1995 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. */
#include "localeinfo.h"
CONST struct monetary_info __monetary_C =
{
(char *) "", (char *) "",
(char *) "", (char *) "",
(char *) "",
(char *) "", (char *) "",
CHAR_MAX,
CHAR_MAX,
CHAR_MAX,
CHAR_MAX,
CHAR_MAX,
CHAR_MAX,
CHAR_MAX,
CHAR_MAX
};
CONST struct monetary_info *_monetary_info = &__monetary_C;
const struct locale_data _nl_C_LC_MONETARY =
{
NULL, 0, /* no file mapped */
15,
"",
"",
"",
"",
"\377",
"",
"",
"\377",
"\377",
"\377",
"\377",
"\377",
"\377",
"\377",
"\377",
};

View File

@ -1,12 +1,16 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
/* Generated by GNU locale 0.1.
Copyright (C) 1995 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. */
#include "localeinfo.h"
CONST struct numeric_info __numeric_C =
{
(char *) ".", (char *) "",
(char *) ""
};
CONST struct numeric_info *_numeric_info = &__numeric_C;
const struct locale_data _nl_C_LC_NUMERIC =
{
NULL, 0, /* no file mapped */
3,
".",
"",
"\377",
};

View File

@ -1,12 +0,0 @@
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
CONST struct response_info __response_C =
{
(char *) "[yY][[:alpha:]]",
(char *) "[nN][[:alpha:]]"
};
CONST struct response_info *_response_info = &__response_C;

View File

@ -1,25 +1,57 @@
/* Built-in time information for `C' locale,
generated Thu Jan 1 00:00:00 1970 by li2c. */
/* Generated by GNU locale 0.1.
Copyright (C) 1995 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
#include "localeinfo.h"
CONST struct time_info __time_C =
{
{
(char *) "Sun", (char *) "Mon", (char *) "Tue", (char *) "Wed", (char *) "Thu", (char *) "Fri", (char *) "Sat", },
{
(char *) "Sunday", (char *) "Monday", (char *) "Tuesday", (char *) "Wednesday", (char *) "Thursday", (char *) "Friday", (char *) "Saturday", },
{
(char *) "Jan", (char *) "Feb", (char *) "Mar", (char *) "Apr", (char *) "May", (char *) "Jun", (char *) "Jul", (char *) "Aug", (char *) "Sep", (char *) "Oct", (char *) "Nov", (char *) "Dec", },
{
(char *) "January", (char *) "February", (char *) "March", (char *) "April", (char *) "May", (char *) "June", (char *) "July", (char *) "August", (char *) "September", (char *) "October", (char *) "November", (char *) "December", },
{ (char *) "AM", (char *) "PM" },
(char *) "%a %b %d %H:%M:%S %Y", (char *) "%m/%d/%y", (char *) "%H:%M:%S",
(char *) "GMT", (char *) ""
};
CONST struct time_info *_time_info = &__time_C;
const struct locale_data _nl_C_LC_TIME =
{
NULL, 0, /* no file mapped */
44,
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
"AM",
"PM",
"%a %b %d %H:%M:%S %Y",
"%m/%d/%y",
"%H:%M:%S",
NULL,
};

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992 Free Software Foundation, Inc.
# Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@ -21,11 +21,10 @@
#
subdir := locale
headers := locale.h localeinfo.h
routines := setlocale localeconv
aux := C-collate C-ctype C-ctype_ct C-ctype_mb \
C-monetary C-numeric C-response C-time
headers := locale.h
distribute := localeinfo.h categories.def
routines := setlocale loadlocale localeconv
categories := ctype messages monetary numeric time # collate
aux = $(categories:%=lc-%) $(categories:%=C-%)
include ../Rules

116
locale/categories.def Normal file
View File

@ -0,0 +1,116 @@
/* Definition of all available locale categories and their items. -*- C -*-
Copyright (C) 1995 Free Software Foundation, Inc.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/* These definitions are used by the locale-related files in the C library
and the programs `localedef' and `locale'.
The general format of the descriptions is like this:
DEFINE_CATEGORY (ID, name, ( items ), setlocale-postload,
locale-input, locale-check, locale-output)
where items itself is an array of entries in the form
{ ID, name, value-type, min, max }
The usage of the load, check, output functions depends on the individual
program code which loads this file.
The various value types for the items are `string', `stringarray', `byte'
and `bytearray'. These cover all possiblee values in the current locale
definitions. `min' and `max' can be individually used again. */
#ifndef NO_POSTLOAD
#define NO_POSTLOAD NULL
#endif
DEFINE_CATEGORY (LC_COLLATE, "LC_COLLATE",
(
{ 0 } /* No data encoding yet. */
), NO_POSTLOAD, collate_input, NULL, NULL )
/* The actual definition of ctype is meaningless here. It is hard coded in
the code because it has to be handled very specially. Only the names of
the functions are important. */
DEFINE_CATEGORY (LC_CTYPE, "LC_CTYPE",
(
{ _NL_CTYPE_CLASS_EB, "ctype-class-eb", string },
{ _NL_CTYPE_TOUPPER_EB, "ctype-toupper-eb", string },
{ _NL_CTYPE_TOLOWER_EB, "ctype-tolower-eb", string },
{ _NL_CTYPE_CLASS_EL, "ctype-class-el", string },
{ _NL_CTYPE_TOUPPER_EL, "ctype-toupper-el", string },
{ _NL_CTYPE_TOLOWER_EL, "ctype-tolower-el", string },
{ 0 }
), _nl_postload_ctype,
ctype_input, ctype_check, ctype_output )
DEFINE_CATEGORY (LC_MONETARY, "LC_MONETARY",
(
{ INT_CURR_SYMBOL, "int_curr_symbol", string },
{ CURRENCY_SYMBOL, "currency_symbol", string },
{ MON_DECIMAL_POINT, "mon_decimal_point", string },
{ MON_THOUSANDS_SEP, "mon_thousands_sep", string },
{ MON_GROUPING, "mon_grouping", bytearray },
{ POSITIVE_SIGN, "positive_sign", string },
{ NEGATIVE_SIGN, "negative_sign", string },
{ INT_FRAC_DIGITS, "int_frac_digits", byte },
{ FRAC_DIGITS, "frac_digits", byte },
{ P_CS_PRECEDES, "p_cs_precedes", byte, 0, 1 },
{ P_SEP_BY_SPACE, "p_sep_by_space", byte, 0, 2 },
{ N_CS_PRECEDES, "n_cs_precedes", byte, 0, 1 },
{ N_SEP_BY_SPACE, "n_sep_by_space", byte, 0, 2 },
{ P_SIGN_POSN, "p_sign_posn", byte, 0, 4 },
{ N_SIGN_POSN, "n_sign_posn", byte, 0, 4 },
{ 0 }
), NO_POSTLOAD, NULL, monetary_check, NULL )
DEFINE_CATEGORY (LC_NUMERIC, "LC_NUMERIC",
(
{ DECIMAL_POINT, "decimal_point", string },
{ THOUSANDS_SEP, "thousands_sep", string },
{ GROUPING, "grouping", bytearray },
{ 0 }
), NO_POSTLOAD, NULL, numeric_check, NULL)
DEFINE_CATEGORY (LC_TIME, "LC_TIME",
(
{ ABDAY_1, "abday", stringarray, 7, 7 },
{ DAY_1, "day", stringarray, 7, 7 },
{ ABMON_1, "abmon", stringarray, 12, 12 },
{ MON_1, "mon", stringarray, 12, 12 },
{ AM_STR, "am_pm", stringarray, 2, 2 },
{ D_T_FMT, "d_t_fmt", string },
{ D_FMT, "d_fmt", string },
{ T_FMT, "t_fmt", string },
{ T_FMT_AMPM, "t_fmt_ampm", string },
{ 0 }
), NO_POSTLOAD, NULL, NULL, NULL )
DEFINE_CATEGORY (LC_MESSAGES, "LC_MESSAGES",
(
{ YESEXPR, "yesexpr", string },
{ NOEXPR, "noexpr", string },
{ YESSTR, "yesstr", string },
{ NOSTR, "nostr", string },
{ 0 }
), NO_POSTLOAD, NULL, messages_check, NULL )

165
locale/langinfo.h Normal file
View File

@ -0,0 +1,165 @@
/* nl_langinfo -- Access to locale-dependent parameters.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifndef _LANGINFO_H
#define _LANGINFO_H 1
#include <locale.h> /* Define the LC_* category names. */
__BEGIN_DECLS
/* Construct an `nl_item' value for `nl_langinfo' from a locale category
(LC_*) and an item index within the category. Some code may depend on
the item values within a category increasing monotonically with the
indices. */
#define _NL_ITEM(category, index) (((category) << 16) | (index))
/* Extract the category and item index from a constructed `nl_item' value. */
#define _NL_ITEM_CATEGORY(item) ((int) (item) >> 16)
#define _NL_ITEM_INDEX(item) ((int) (item) & 0xffff)
/* Enumeration of locale items that can be queried with `nl_langinfo'. */
typedef enum
{
/* LC_TIME category: date and time formatting. */
/* Abbreviated days of the week. */
ABDAY_1 = _NL_ITEM (LC_TIME, 0), /* Sun */
ABDAY_2,
ABDAY_3,
ABDAY_4,
ABDAY_5,
ABDAY_6,
ABDAY_7,
/* Long-named days of the week. */
DAY_1, /* Sunday */
DAY_2, /* Monday */
DAY_3, /* Tuesday */
DAY_4, /* Wednesday */
DAY_5, /* Thursday */
DAY_6, /* Friday */
DAY_7, /* Saturday */
/* Abbreviated month names. */
ABMON_1, /* Jan */
ABMON_2,
ABMON_3,
ABMON_4,
ABMON_5,
ABMON_6,
ABMON_7,
ABMON_8,
ABMON_9,
ABMON_10,
ABMON_11,
ABMON_12,
/* Long month names. */
MON_1, /* January */
MON_2,
MON_3,
MON_4,
MON_5,
MON_6,
MON_7,
MON_8,
MON_9,
MON_10,
MON_11,
MON_12,
AM_STR, /* Ante meridian string. */
PM_STR, /* Post meridian string. */
D_T_FMT, /* Date and time format for strftime. */
D_FMT, /* Date format for strftime. */
T_FMT, /* Time format for strftime. */
T_FMT_AMPM, /* 12-hour time format for strftime. */
ERA, /* Alternate era. */
ERA_YEAR, /* Year in alternate era format. */
ERA_D_FMT, /* Date in alternate ear format. */
ALT_DIGITS, /* Alternate symbols for digits. */
_NL_NUM_LC_TIME, /* Number of indices in LC_TIME category. */
/* LC_CTYPE category: character classification.
This information is accessed by the functions in <ctype.h>.
These `nl_langinfo' names are used internally. */
_NL_CTYPE_CLASS_EB = _NL_ITEM (LC_CTYPE, 0),
_NL_CTYPE_TOUPPER_EB,
_NL_CTYPE_TOLOWER_EB,
_NL_CTYPE_CLASS_EL,
_NL_CTYPE_TOUPPER_EL,
_NL_CTYPE_TOLOWER_EL,
_NL_NUM_LC_CTYPE,
/* LC_MONETARY category: formatting of monetary quantities.
These items each correspond to a member of `struct lconv',
defined in <locale.h>. */
INT_CURR_SYMBOL = _NL_ITEM (LC_MONETARY, 0),
CURRENCY_SYMBOL,
MON_DECIMAL_POINT,
MON_THOUSANDS_SEP,
MON_GROUPING,
POSITIVE_SIGN,
NEGATIVE_SIGN,
INT_FRAC_DIGITS,
FRAC_DIGITS,
P_CS_PRECEDES,
P_SEP_BY_SPACE,
N_CS_PRECEDES,
N_SEP_BY_SPACE,
P_SIGN_POSN,
N_SIGN_POSN,
_NL_NUM_LC_MONETARY,
/* LC_NUMERIC category: formatting of numbers.
These also correspond to members of `struct lconv'; see <locale.h>. */
DECIMAL_POINT = _NL_ITEM (LC_NUMERIC, 0),
THOUSANDS_SEP,
GROUPING,
_NL_NUM_LC_NUMERIC,
YESEXPR = _NL_ITEM (LC_MESSAGES, 0), /* Regex matching ``yes'' input. */
NOEXPR, /* Regex matching ``no'' input. */
YESSTR, /* Output string for ``yes''. */
NOSTR, /* Output string for ``no''. */
_NL_NUM_LC_MESSAGES,
/* Stubs for unfinished categories. */
_NL_NUM_LC_COLLATE = 0,
} nl_item;
/* Return the current locale's value for ITEM.
If ITEM is invalid, an empty string is returned.
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));
__END_DECLS
#endif /* langinfo.h */

51
locale/lc-ctype.c Normal file
View File

@ -0,0 +1,51 @@
/* Define current locale data for LC_CTYPE category.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include "localeinfo.h"
#include <ctype.h>
#include <endian.h>
_NL_CURRENT_DEFINE (LC_CTYPE);
/* We are called after loading LC_CTYPE data to load it into
the variables used by the ctype.h macros.
There are three arrays of short ints which need to be indexable
from -128 to 255 inclusive. Stored in the locale data file are
a copy of each for each byte order. */
void
_nl_postload_ctype (void)
{
#if BYTE_ORDER == BIG_ENDIAN
#define bo(x) x##_EB
#elif BYTE_ORDER == LITTLE_ENDIAN
#define bo(x) x##_EL
#else
#error bizarre byte order
#endif
#define current(unsigned,x) \
((const unsigned short int *) _NL_CURRENT (LC_CTYPE, bo(_NL_CTYPE_##x)) \
+ 128)
__ctype_b = current (unsigned, CLASS);
__ctype_toupper = current (, TOUPPER);
__ctype_tolower = current (, TOLOWER);
}

22
locale/lc-messages.c Normal file
View File

@ -0,0 +1,22 @@
/* Define current locale data for LC_MESSAGES category.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include "localeinfo.h"
_NL_CURRENT_DEFINE (LC_MESSAGES);

22
locale/lc-monetary.c Normal file
View File

@ -0,0 +1,22 @@
/* Define current locale data for LC_MONETARY category.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include "localeinfo.h"
_NL_CURRENT_DEFINE (LC_MONETARY);

22
locale/lc-numeric.c Normal file
View File

@ -0,0 +1,22 @@
/* Define current locale data for LC_NUMERIC category.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include "localeinfo.h"
_NL_CURRENT_DEFINE (LC_NUMERIC);

22
locale/lc-time.c Normal file
View File

@ -0,0 +1,22 @@
/* Define current locale data for LC_TIME category.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include "localeinfo.h"
_NL_CURRENT_DEFINE (LC_TIME);

186
locale/loadlocale.c Normal file
View File

@ -0,0 +1,186 @@
/* Functions to read locale data files.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "localeinfo.h"
const size_t _nl_category_num_items[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = _NL_NUM_##category,
#include "categories.def"
#undef DEFINE_CATEGORY
};
struct locale_data *
_nl_load_locale (int category, char **name)
{
char *file;
int fd;
struct
{
unsigned int magic;
unsigned int nstrings;
unsigned int strindex[0];
} *filedata;
struct stat st;
struct locale_data *newdata;
int swap = 0;
inline unsigned int SWAP (const unsigned int *inw)
{
const unsigned char *inc = (const unsigned char *) inw;
if (!swap)
return *inw;
return (inc[3] << 24) | (inc[2] << 16) | (inc[1] << 8) | inc[0];
}
unsigned int i;
if ((*name)[0] == '\0')
{
*name = getenv (_nl_category_names[category]);
if (! *name || (*name) == '\0')
*name = getenv ("LANG");
if (! *name || (*name) == '\0')
*name = (char *) "local";
}
/* XXX can't use asprintf here */
if (asprintf (&file, "%s%s/%s",
strchr (*name, '/') != NULL ? "" : "/share/locale/", /* XXX */
*name, _nl_category_names[category]) == -1)
return NULL;
fd = __open (file, O_RDONLY);
free (file);
if (fd < 0)
return NULL;
if (__fstat (fd, &st) < 0)
goto puntfd;
{
/* Map in the file's data. */
int save = errno;
filedata = (void *) __mmap ((caddr_t) 0, st.st_size,
PROT_READ, MAP_FILE|MAP_COPY, fd, 0);
if (filedata == (void *) -1)
{
if (errno == ENOSYS)
{
/* No mmap; allocate a buffer and read from the file. */
filedata = malloc (st.st_size);
if (filedata)
{
off_t to_read = st.st_size;
ssize_t nread;
char *p = (char *) filedata;
while (to_read > 0)
{
nread = __read (fd, p, to_read);
if (nread <= 0)
{
free (filedata);
if (nread == 0)
errno = EINVAL; /* Bizarreness going on. */
goto puntfd;
}
p += nread;
to_read -= nread;
}
}
else
goto puntfd;
errno = save;
}
else
goto puntfd;
}
}
if (filedata->magic == LIMAGIC (category))
/* Good data file in our byte order. */
swap = 0;
else
{
/* Try the other byte order. */
swap = 1;
if (SWAP (&filedata->magic) != LIMAGIC (category))
/* Bad data file in either byte order. */
{
puntmap:
__munmap ((caddr_t) filedata, st.st_size);
puntfd:
__close (fd);
return NULL;
}
}
#define W(word) SWAP (&(word))
if (W (filedata->nstrings) < _nl_category_num_items[category] ||
(sizeof *filedata + W (filedata->nstrings) * sizeof (unsigned int)
>= st.st_size))
{
/* Insufficient data. */
errno = EINVAL;
goto puntmap;
}
newdata = malloc (sizeof *newdata +
W (filedata->nstrings) * sizeof (char *));
if (! newdata)
goto puntmap;
newdata->filedata = (void *) filedata;
newdata->filesize = st.st_size;
newdata->nstrings = W (filedata->nstrings);
for (i = 0; i < newdata->nstrings; ++i)
{
unsigned int idx = W (filedata->strindex[i]);
if (idx >= newdata->filesize)
{
free (newdata);
errno = EINVAL;
goto puntmap;
}
newdata->strings[i] = newdata->filedata + idx;
}
return newdata;
}
void
_nl_free_locale (struct locale_data *data)
{
int save = errno;
if (__munmap ((caddr_t) data->filedata, data->filesize) < 0)
{
if (errno == ENOSYS)
free ((void *) data->filedata);
errno = save;
}
free (data);
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -16,36 +16,37 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <locale.h>
#include "localeinfo.h"
/* Return monetary and numeric information about the current locale. */
struct lconv *
DEFUN_VOID(localeconv)
localeconv __P ((void))
{
static struct lconv result;
result.decimal_point = (char *) _numeric_info->decimal_point;
result.thousands_sep = (char *) _numeric_info->thousands_sep;
result.grouping = (char *) _numeric_info->grouping;
result.decimal_point = (char *) _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
result.thousands_sep = (char *) _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
result.grouping = (char *) _NL_CURRENT (LC_NUMERIC, GROUPING);
result.int_curr_symbol = (char *) _monetary_info->int_curr_symbol;
result.currency_symbol = (char *) _monetary_info->currency_symbol;
result.mon_decimal_point = (char *) _monetary_info->mon_decimal_point;
result.mon_thousands_sep = (char *) _monetary_info->mon_thousands_sep;
result.mon_grouping = (char *) _monetary_info->mon_grouping;
result.positive_sign = (char *) _monetary_info->positive_sign;
result.negative_sign = (char *) _monetary_info->negative_sign;
result.int_frac_digits = _monetary_info->int_frac_digits;
result.frac_digits = _monetary_info->frac_digits;
result.p_cs_precedes = _monetary_info->p_cs_precedes;
result.p_sep_by_space = _monetary_info->p_sep_by_space;
result.n_cs_precedes = _monetary_info->p_cs_precedes;
result.n_sep_by_space = _monetary_info->n_sep_by_space;
result.p_sign_posn = _monetary_info->p_sign_posn;
result.n_sign_posn = _monetary_info->n_sign_posn;
result.int_curr_symbol = (char *) _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
result.currency_symbol = (char *) _NL_CURRENT (LC_MONETARY, CURRENCY_SYMBOL);
result.mon_decimal_point = (char *) _NL_CURRENT (LC_MONETARY,
MON_DECIMAL_POINT);
result.mon_thousands_sep = (char *) _NL_CURRENT (LC_MONETARY,
MON_THOUSANDS_SEP);
result.mon_grouping = (char *) _NL_CURRENT (LC_MONETARY, MON_GROUPING);
result.positive_sign = (char *) _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
result.negative_sign = (char *) _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
result.int_frac_digits = *(char *) _NL_CURRENT (LC_MONETARY,
INT_FRAC_DIGITS);
result.frac_digits = *(char *) _NL_CURRENT (LC_MONETARY, FRAC_DIGITS);
result.p_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY, P_CS_PRECEDES);
result.p_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY, P_SEP_BY_SPACE);
result.n_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY, P_CS_PRECEDES);
result.n_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY, N_SEP_BY_SPACE);
result.p_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
result.n_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
return &result;
}

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
/* localeinfo.h -- declarations for internal libc locale interfaces
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -13,196 +14,54 @@ 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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/* Locale-specific information. */
#ifndef _LOCALEINFO_H
#define _LOCALEINFO_H 1
#ifndef _LOCALEINFO_H
#define _LOCALEINFO_H 1
#define __need_size_t
#define __need_wchar_t
#include <stddef.h>
#include <limits.h>
#include <langinfo.h>
#include <sys/types.h>
/* Magic number at the beginning of a locale data file for CATEGORY. */
#define LIMAGIC(category) (0x051472CA ^ (category))
/* Change these if the `wchar_t' type is changed. */
#define WCHAR_MAX ((wchar_t) UCHAR_MAX)
/* Used by multibyte char functions. */
typedef struct
{
char *string; /* Bytes. */
size_t len; /* # of bytes. */
long int shift; /* # of mb_char's to shift. */
} mb_char;
struct ctype_mbchar_info
{
size_t mb_max; /* Max MB char length. */
mb_char *mb_chars; /* MB chars. */
};
struct ctype_ctype_info
{
unsigned short int *ctype_b; /* Characteristics. */
short int *ctype_tolower; /* Case mappings. */
short int *ctype_toupper; /* Case mappings. */
};
struct ctype_info
{
struct ctype_ctype_info *ctype;
struct ctype_mbchar_info *mbchar;
};
extern __const struct ctype_info *_ctype_info;
/* These are necessary because they are used in a header file. */
extern __const unsigned short int *__ctype_b;
extern __const short int *__ctype_tolower;
extern __const short int *__ctype_toupper;
/* Used by strcoll and strxfrm. */
typedef struct
{
unsigned char *values;
size_t nvalues;
} literal_value;
typedef struct
{
union
/* Structure describing locale data in core for a category. */
struct locale_data
{
literal_value literal;
/* %%% This may become a regex_t in the future. */
char *regexp;
} replace, with;
unsigned int regexp:1;
} subst;
const char *filedata; /* Region mapping the file data. */
off_t filesize; /* Size of the file (and the region). */
struct collate_info
{
size_t nsubsts;
subst *substs;
unsigned char *values;
unsigned char *offsets;
};
extern __const struct collate_info *_collate_info;
unsigned int nstrings; /* Number of strings below. */
const char *strings[0]; /* Items, usually pointers into `filedata'. */
};
/* Used by strtod, atof. */
struct numeric_info
{
char *decimal_point;
char *thousands_sep;
char *grouping;
};
/* For each category declare the variable for the current locale data. */
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
extern const struct locale_data *_nl_current_##category;
#include "categories.def"
#undef DEFINE_CATEGORY
extern __const struct numeric_info *_numeric_info;
extern const char *const _nl_category_names[LC_ALL];
/* Extract the current CATEGORY locale's string for ITEM. */
#define _NL_CURRENT(category, item) \
(_nl_current_##category->strings[_NL_ITEM_INDEX (item)])
/* This is used in lc-CATEGORY.c to define _nl_current_CATEGORY. */
#define _NL_CURRENT_DEFINE(category) \
extern const struct locale_data _nl_C_##category; \
const struct locale_data *nl_current_##category = &_nl_C_##category
/* Load the locale data for CATEGORY from the file specified by *NAME.
If *NAME is "", use environment variables as specified by POSIX,
and fill in *NAME with the actual name used. */
extern struct locale_data *_nl_load_locale (int category, char **name);
/* Free the locale data read in by a `_nl_load_locale' call. */
extern void _nl_free_locale (struct locale_data *);
/* Used in the return value of localeconv. */
struct monetary_info
{
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
};
extern __const struct monetary_info *_monetary_info;
/* Used by strftime, asctime. */
struct time_info
{
char *abbrev_wkday[7]; /* Short weekday names. */
char *full_wkday[7]; /* Full weekday names. */
char *abbrev_month[12]; /* Short month names. */
char *full_month[12]; /* Full month names. */
char *ampm[2]; /* "AM" and "PM" strings. */
char *date_time; /* Appropriate date and time format. */
char *date; /* Appropriate date format. */
char *time; /* Appropriate time format. */
char *ut0; /* Name for GMT. */
char *tz; /* Default TZ value. */
};
extern __const struct time_info *_time_info;
struct response_info
{
/* Regexp for affirmative answers. */
char *yesexpr;
/* Regexp for negative answers. */
char *noexpr;
};
extern __const struct response_info *_response_info;
/* Locale structure. */
typedef struct
{
char *name;
int categories;
unsigned int allocated:1;
int subcategories;
size_t num_sublocales;
struct sub_locale *sublocales;
__ptr_t *info;
} locale;
typedef struct sub_locale
{
unsigned int pointer:1;
int categories;
char *name;
locale *locale;
} sublocale;
/* This is the magic number that localeinfo object files begin with.
In case you're wondering why I chose the value 0x051472CA, it's
because I was born on 05-14-72 in Oakland, CA. */
#define LIMAGIC 0x051472CA
/* This is the magic number that precedes each category-specific section
of a localeinfo object file. It's the arbitrary magic number above,
but modified by the category so that it's different from the per-file
magic number and unique for each category. */
#define CATEGORY_MAGIC(x) (LIMAGIC ^ (x))
extern __const char *__lidir, *__lidefault;
extern locale *__find_locale __P ((int categories, __const char *name));
extern locale *__new_locale __P ((locale *));
extern locale *__localefile __P ((__const char *file));
extern void __free_locale __P ((locale *));
#endif /* localeinfo.h */
#endif /* localeinfo.h */

63
locale/nl_langinfo.c Normal file
View File

@ -0,0 +1,63 @@
/* nl_langinfo -- User interface for extracting locale-dependent parameters.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <langinfo.h>
/* This array duplicates `_nl_current' defined in setlocale.c; but since
the references here are not weak references, this guarantees that the
data for all the categories will be linked in. */
static const struct locale_data * *const nldata[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = &_nl_current_##category,
#include "categories.def"
#undef DEFINE_CATEGORY
};
/* Return a string with the data for locale-dependent parameter ITEM. */
char *
nl_langinfo (item)
nl_item item;
{
int category = _NL_ITEM_CATEGORY (item);
unsigned int index = _NL_ITEM_INDEX (item);
const struct locale_data *data;
if (category < 0 || category >= LC_ALL)
{
/* Bogus category: bogus item. */
errno = EINVAL;
return NULL;
}
data = nldata[category];
if (index >= data->nstrings)
{
/* Bogus index for this category: bogus item. */
errno = EINVAL;
return NULL;
}
/* Return the string for the specified item. */
return (char *) nldata->strings[index];
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -16,30 +16,389 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <errno.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include <langinfo.h>
#include "localeinfo.h"
/* For each category declare two external variables (with weak references):
extern const struct locale_data *_nl_current_CATEGORY;
This points to the current locale's in-core data for CATEGORY.
extern const struct locale_data _nl_C_CATEGORY;
This contains the built-in "C"/"POSIX" locale's data for CATEGORY.
Both are weak references; if &_nl_current_CATEGORY is zero,
then nothing is using the locale data. */
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
extern const struct locale_data *_nl_current_##category; \
extern const struct locale_data _nl_C_##category; \
weak_symbol (_nl_current_##category) weak_symbol (_nl_C_##category)
#include "categories.def"
#undef DEFINE_CATEGORY
/* Switch to the locale called NAME in CATEGORY.
Return a string describing the locale. This string can
be used as the NAME argument in a later call.
If NAME is NULL, don't switch locales, but return the current one.
If NAME is "", switch to a locale based on the environment variables,
as per POSIX. Return NULL on error. */
char *
DEFUN(setlocale, (category, name), int category AND CONST char *name)
/* Array indexed by category of pointers to _nl_current_CATEGORY slots.
Elements are zero for categories whose data is never used. */
const struct locale_data * *const _nl_current[] =
{
/* Braindead implementation until I finish the fancy one. */
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = &_nl_current_##category,
#include "categories.def"
#undef DEFINE_CATEGORY
};
if (name == NULL || name[0] == '\0')
return (char *) "C";
/* Array indexed by category of pointers to _nl_C_CATEGORY slots.
Elements are zero for categories whose data is never used. */
const struct locale_data *const _nl_C[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = &_nl_C_##category,
#include "categories.def"
#undef DEFINE_CATEGORY
};
if (!strcmp(name, "C") || !strcmp(name, "POSIX"))
return (char *) name;
errno = EINVAL;
return NULL;
/* Define an array of category names (also the environment variable names),
indexed by integral category. */
const char *const _nl_category_names[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = category_name,
#include "categories.def"
#undef DEFINE_CATEGORY
};
/* An array of their lengths, for convenience. */
const size_t _nl_category_name_sizes[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
[category] = sizeof (category_name) - 1,
#include "categories.def"
#undef DEFINE_CATEGORY
};
/* Declare the postload functions used below. */
#undef NO_POSTLOAD
#define NO_POSTLOAD _nl_postload_ctype /* Harmless thing known to exist. */
#define DEFINE_CATEGORY(category, category_name, items, postload, b, c, d) \
extern void postload (void);
#include "categories.def"
#undef DEFINE_CATEGORY
#undef NO_POSTLOAD
/* Define an array indexed by category of postload functions to call after
loading and installing that category's data. */
void (*const _nl_category_postload[]) (void) =
{
#define DEFINE_CATEGORY(category, category_name, items, postload, b, c, d) \
[category] = postload,
#include "categories.def"
#undef DEFINE_CATEGORY
};
const char _nl_C_name[] = "C";
/* Name of current locale for each individual category.
Each is malloc'd unless it is nl_C_name. */
const char *_nl_current_names[] =
{
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
_nl_C_name,
#include "categories.def"
#undef DEFINE_CATEGORY
};
/* Composite LC_ALL name for current locale.
This is malloc'd unless it's _nl_C_name. */
char *_nl_current_composite_name = (char *) _nl_C_name;
/* Switch to the locale called NAME in CATEGORY. Return a string
describing the locale. This string can be used as the NAME argument in
a later call. If NAME is NULL, don't switch locales, but return the
current one. If NAME is "", switch to a locale based on the environment
variables, as per POSIX. Return NULL on error. */
char *
setlocale (int category, const char *name)
{
/* Return a malloc'd copy of STRING. */
char *copy (const char *string)
{
size_t len = strlen (string) + 1;
char *new = malloc (len);
return new ? memcpy (new, string, len) : NULL;
}
/* Construct a new composite name. */
char *new_composite_name (int category, char *newnames[LC_ALL])
{
size_t lens[LC_ALL], cumlen = 0;
int i;
char *new, *p;
int same = 1;
for (i = 0; i < LC_ALL; ++i)
{
char *name = (category == LC_ALL ? newnames[i] :
category == i ? newnames[0] :
(char *) _nl_current_names[i]);
lens[i] = strlen (name);
cumlen += _nl_category_name_sizes[i] + 1 + lens[i] + 1;
if (i > 0 && same && strcmp (name, newnames[0]))
same = 0;
}
if (same)
{
/* All the categories use the same name. */
new = malloc (lens[0] + 1);
if (! new)
{
if (!strcmp (newnames[0], "C") || !strcmp (newnames[0], "POSIX"))
return (char *) _nl_C_name;
return NULL;
}
memcpy (new, newnames[0], lens[0] + 1);
return new;
}
new = malloc (cumlen);
if (! new)
return NULL;
p = new;
for (i = 0; i < LC_ALL; ++i)
{
/* Add "CATEGORY=NAME;" to the string. */
char *name = (category == LC_ALL ? newnames[i] :
category == i ? newnames[0] :
(char *) _nl_current_names[i]);
memcpy (p, _nl_category_names[i], _nl_category_name_sizes[i]);
p += _nl_category_name_sizes[i];
*p++ = '=';
memcpy (p, name, lens[i]);
p += lens[i];
*p++ = ';';
}
p[-1] = '\0'; /* Clobber the last ';'. */
return new;
}
/* Put COMPOSITE in _nl_current_composite_name and free the old value. */
void setcomposite (char *composite)
{
char *old = _nl_current_composite_name;
_nl_current_composite_name = composite;
if (old != _nl_C_name)
free (old);
}
/* Put NAME in _nl_current_names and free the old value. */
void setname (int category, const char *name)
{
const char *oldname = _nl_current_names[category];
_nl_current_names[category] = name;
if (oldname != _nl_C_name)
free ((char *) oldname);
}
/* Put DATA in *_nl_current[CATEGORY] and free the old value. */
void setdata (int category, struct locale_data *data)
{
if (_nl_current[category])
{
const struct locale_data *olddata = *_nl_current[category];
*_nl_current[category] = data;
if (_nl_category_postload[category])
(*_nl_category_postload[category]) ();
if (olddata != _nl_C[category])
_nl_free_locale ((struct locale_data *) olddata);
}
}
const char *current_name;
char *composite;
if (category < 0 || category > LC_ALL)
{
errno = EINVAL;
return NULL;
}
if (category == LC_ALL)
current_name = _nl_current_composite_name;
else
current_name = _nl_current_names[category];
if (name == NULL)
/* Return the name of the current locale. */
return (char *) current_name;
if (name == current_name)
/* Changing to the same thing. */
return (char *) current_name;
if (category == LC_ALL)
{
const size_t len = strlen (name) + 1;
char *newnames[LC_ALL];
char *p;
struct locale_data *newdata[LC_ALL];
/* Set all name pointers to the argument name. */
for (category = 0; category < LC_ALL; ++category)
newnames[category] = (char *) name;
p = strchr (name, ';');
if (p)
{
/* This is a composite name. Make a local copy and split it up. */
int i;
char *n = alloca (len);
memcpy (n, name, len);
while (p = strchr (n, '='))
{
for (i = 0; i < LC_ALL; ++i)
if (_nl_category_name_sizes[i] == p - n &&
!memcmp (_nl_category_names[i], n, p - n))
break;
if (i == LC_ALL)
{
/* Bogus category name. */
errno = EINVAL;
return NULL;
}
if (i < LC_ALL)
{
/* Found the category this clause sets. */
char *end = strchr (++p, ';');
newnames[i] = p;
if (end)
{
/* Examine the next clause. */
*end = '\0';
n = end + 1;
}
else
/* This was the last clause. We are done. */
break;
}
}
for (i = 0; i < LC_ALL; ++i)
if (newnames[i] == name)
/* The composite name did not specify all categories. */
return NULL;
}
/* Load the new data for each category. */
while (category-- > 0)
/* Only actually load the data if anything will use it. */
if (_nl_current[category])
{
newdata[category] = _nl_load_locale (category,
&newnames[category]);
if (newdata[category])
newnames[category] = copy (newnames[category]);
if (! newdata[category] || ! newnames[category])
{
if (!strcmp (newnames[category], "C") ||
!strcmp (newnames[category], "POSIX"))
{
/* Loading from a file failed, but this is a request
for the default locale. Use the built-in data. */
if (! newdata[category])
newdata[category]
= (struct locale_data *) _nl_C[category];
newnames[category] = (char *) _nl_C_name;
}
else
{
/* Loading this part of the locale failed.
Abort the composite load. */
abort_composite:
while (++category < LC_ALL)
{
if (_nl_current[category])
_nl_free_locale (newdata[category]);
if (newnames[category] != _nl_C_name)
free (newnames[category]);
}
return NULL;
}
}
}
else
{
/* The data is never used; just change the name. */
newnames[category] = copy (newnames[category]);
if (! newnames[category])
{
if (!strcmp (newnames[category], "C") ||
!strcmp (newnames[category], "POSIX"))
newnames[category] = (char *) _nl_C_name;
else
{
while (++category < LC_ALL)
if (newnames[category] != _nl_C_name)
free (newnames[category]);
}
}
}
composite = new_composite_name (LC_ALL, newnames);
if (! composite)
{
category = -1;
goto abort_composite;
}
/* Now we have loaded all the new data. Put it in place. */
for (; category < LC_ALL; ++category)
{
setdata (category, newdata[category]);
setname (category, newnames[category]);
}
setcomposite (composite);
return composite;
}
else
{
char *newname = copy (name);
if (! newname)
{
if (!strcmp (name, "C") || !strcmp (name, "POSIX"))
newname = (char *) _nl_C_name;
else
return NULL;
}
composite = new_composite_name (category, &newname);
if (! composite)
{
if (newname != _nl_C_name)
free (newname);
return NULL;
}
/* Only actually load the data if anything will use it. */
if (_nl_current[category])
{
struct locale_data *newdata = _nl_load_locale (category,
(char **) &name);
if (! newdata)
{
if (!strcmp (name, "C") || !strcmp (name, "POSIX"))
newdata = (struct locale_data *) _nl_C[category];
else
return NULL;
}
setdata (category, newdata);
}
setname (category, newname);
setcomposite (composite);
return newname;
}
}

View File

@ -32,7 +32,8 @@ Cambridge, MA 02139, USA. */
#include <gmp.h>
#include <gmp-impl.h>
#include <longlong.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <limits.h>
#include <math.h>
#include <printf.h>
#include <stdarg.h>
@ -227,22 +228,22 @@ __printf_fp (fp, info, args)
/* Figure out the decimal point character. */
if (mbtowc (&decimal, _numeric_info->decimal_point,
strlen (_numeric_info->decimal_point)) <= 0)
decimal = (wchar_t) *_numeric_info->decimal_point;
if (mbtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
if (info->group)
{
grouping = _numeric_info->grouping; /* Cache the grouping info array. */
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
if (*grouping <= 0 || *grouping == CHAR_MAX)
grouping = NULL;
else
{
/* Figure out the thousands seperator character. */
if (mbtowc (&thousands_sep, _numeric_info->thousands_sep,
strlen (_numeric_info->thousands_sep)) <= 0)
thousands_sep = (wchar_t) *_numeric_info->thousands_sep;
if (mbtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
thousands_sep = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
if (thousands_sep == L'\0')
grouping = NULL;
}

View File

@ -17,7 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <ctype.h>
#include <errno.h>
#include <float.h>
@ -38,7 +38,8 @@ Cambridge, MA 02139, USA. */
/* This code is for use in libio. */
#include <libioP.h>
#define PUT(f, s, n) _IO_sputn (f, s, n)
#define PAD(padchar) _IO_padn (s, padchar, width)
#define PAD(padchar) \
(width > 0 ? (_IO_padn (s, padchar, width), done += width) : 0)
#define PUTC(c, f) _IO_putc(c, f)
#define vfprintf _IO_vfprintf
#define size_t _IO_size_t
@ -159,10 +160,10 @@ DEFUN(vfprintf, (s, format, args),
(void) mblen ((char *) NULL, 0);
/* Figure out the thousands seperator character. */
if (mbtowc (&thousands_sep, _numeric_info->thousands_sep,
strlen (_numeric_info->thousands_sep)) <= 0)
thousands_sep = (wchar_t) *_numeric_info->thousands_sep;
grouping = _numeric_info->grouping; /* Cache the grouping info array. */
if (mbtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
thousands_sep = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
if (*grouping == '\0' || thousands_sep == L'\0')
grouping = NULL;

View File

@ -17,7 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <errno.h>
#include <limits.h>
#include <ctype.h>
@ -93,9 +93,9 @@ DEFUN(__vfscanf, (s, format, arg),
}
/* Figure out the decimal point character. */
if (mbtowc(&decimal, _numeric_info->decimal_point,
strlen(_numeric_info->decimal_point)) <= 0)
decimal = (wchar_t) *_numeric_info->decimal_point;
if (mbtowc(&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
c = inchar();

View File

@ -34,14 +34,14 @@ Cambridge, MA 02139, USA. */
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <math.h>
#include <stdlib.h>
#include "gmp.h"
#include "gmp-impl.h"
#include "../stdio/gmp.h"
#include "../stdio/gmp-impl.h"
#include <gmp-mparam.h>
#include "longlong.h"
#include "fpioconst.h"
#include "../stdio/longlong.h"
#include "../stdio/fpioconst.h"
#define NDEBUG 1
#include <assert.h>
@ -350,15 +350,15 @@ STRTOF (nptr, endptr)
/* Return with no conversion if the grouping of [STARTP,CP) is bad. */
#define CHECK_GROUPING if (! grouping_ok (startp, cp)) RETURN (0.0, nptr); else
grouping = _numeric_info->grouping; /* Cache the grouping info array. */
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
if (*grouping <= 0 || *grouping == CHAR_MAX)
grouping = NULL;
else
{
/* Figure out the thousands seperator character. */
if (mbtowc (&thousands_sep, _numeric_info->thousands_sep,
strlen (_numeric_info->thousands_sep)) <= 0)
thousands = (wchar_t) *_numeric_info->thousands_sep;
if (mbtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
if (thousands == L'\0')
grouping = NULL;
}
@ -369,9 +369,9 @@ STRTOF (nptr, endptr)
#endif
/* Find the locale's decimal point character. */
if (mbtowc (&decimal, _numeric_info->decimal_point,
strlen (_numeric_info->decimal_point)) <= 0)
decimal = (wchar_t) *_numeric_info->decimal_point;
if (mbtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
/* Prepare number representation. */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1993 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -17,7 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <errno.h>
#include <stdio.h>
#include <time.h>
@ -39,9 +39,9 @@ DEFUN(asctime, (tp), CONST struct tm *tp)
if (sprintf (result, format,
(tp->tm_wday < 0 || tp->tm_wday >= 7 ?
"???" : _time_info->abbrev_wkday[tp->tm_wday]),
"???" : _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday)),
(tp->tm_mon < 0 || tp->tm_mon >= 12 ?
"???" : _time_info->abbrev_month[tp->tm_mon]),
"???" : _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon)),
tp->tm_mday, tp->tm_hour, tp->tm_min,
tp->tm_sec, 1900 + tp->tm_year) < 0)
return NULL;

View File

@ -17,7 +17,6 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h>
#include <ctype.h>
#include <stdio.h>

View File

@ -3,7 +3,7 @@
_
*/
/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -22,7 +22,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include "../locale/localeinfo.h"
#include <ctype.h>
#include <limits.h>
#include <stddef.h>
@ -90,19 +90,20 @@ DEFUN(strftime, (s, maxsize, format, tp),
char *s AND size_t maxsize AND
CONST char *format AND register CONST struct tm *tp)
{
CONST char *CONST a_wkday = _time_info->abbrev_wkday[tp->tm_wday];
CONST char *CONST f_wkday = _time_info->full_wkday[tp->tm_wday];
CONST char *CONST a_month = _time_info->abbrev_month[tp->tm_mon];
CONST char *CONST f_month = _time_info->full_month[tp->tm_mon];
CONST char *CONST a_wkday = _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday);
CONST char *CONST f_wkday = _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday);
CONST char *CONST a_month = _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon);
CONST char *CONST f_month = _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon);
size_t aw_len = strlen(a_wkday);
size_t am_len = strlen(a_month);
size_t wkday_len = strlen(f_wkday);
size_t month_len = strlen(f_month);
int hour12 = tp->tm_hour;
CONST char *CONST ampm = _time_info->ampm[hour12 >= 12];
size_t ap_len = strlen(ampm);
CONST unsigned int y_week0 = week(tp, 0);
CONST unsigned int y_week1 = week(tp, 1);
CONST char *CONST ampm = _NL_CURRENT (LC_TIME,
hour12 > 12 ? PM_STR : AM_STR);
size_t ap_len = strlen (ampm);
CONST unsigned int y_week0 = week (tp, 0);
CONST unsigned int y_week1 = week (tp, 1);
CONST char *zone;
size_t zonelen;
register size_t i = 0;
@ -172,7 +173,7 @@ DEFUN(strftime, (s, maxsize, format, tp),
break;
case 'c':
subfmt = _time_info->date_time;
subfmt = _NL_CURRENT (LC_TIME, D_T_FMT);
subformat:
{
size_t len = strftime (p, maxsize - i, subfmt, tp);
@ -265,11 +266,11 @@ DEFUN(strftime, (s, maxsize, format, tp),
break;
case 'X':
subfmt = _time_info->time;
subfmt = _NL_CURRENT (LC_TIME, T_FMT);
goto subformat;
case 'x':
subfmt = _time_info->date;
subfmt = _NL_CURRENT (LC_TIME, D_FMT);
goto subformat;
case 'Y':

View File

@ -17,7 +17,6 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
@ -111,22 +110,21 @@ DEFUN_VOID(__tzset)
tz = NULL;
}
if (tz == NULL || *tz == '\0')
tz = _time_info->tz;
if (tz == NULL || *tz == '\0')
{
__tzfile_read((char *) NULL);
if (!__use_tzfile)
{
size_t len = strlen(_time_info->ut0) + 1;
const char UTC[] = "UTC";
size_t len = sizeof UTC;
tz_rules[0].name = (char *) malloc(len);
if (tz_rules[0].name == NULL)
return;
tz_rules[1].name = (char *) malloc(len);
if (tz_rules[1].name == NULL)
return;
memcpy((PTR) tz_rules[0].name, _time_info->ut0, len);
memcpy((PTR) tz_rules[1].name, _time_info->ut0, len);
memcpy ((PTR) tz_rules[0].name, UTC, len);
memcpy ((PTR) tz_rules[1].name, UTC, len);
tz_rules[0].type = tz_rules[1].type = J0;
tz_rules[0].m = tz_rules[0].n = tz_rules[0].d = 0;
tz_rules[1].m = tz_rules[1].n = tz_rules[1].d = 0;
@ -139,7 +137,7 @@ DEFUN_VOID(__tzset)
return;
}
/* Clear out old state and reset to unnamed GMT. */
/* Clear out old state and reset to unnamed UTC. */
memset (tz_rules, 0, sizeof tz_rules);
tz_rules[0].name = tz_rules[1].name = (char *) "";
@ -165,7 +163,7 @@ DEFUN_VOID(__tzset)
tz += l;
/* Figure out the standard offset from GMT. */
/* Figure out the standard offset from UTC. */
if (*tz == '\0' || (*tz != '+' && *tz != '-' && !isdigit(*tz)))
return;