* libc/locale/locale.c (_setlocale_r): New implementation based on

FreeBSD's setlocale.
	(currentlocale): New helper function.
	(loadlocale): Ditto.
	(__locale_charset): New function.
	(__locale_msgcharset): Rename from __locale_charset.
	* libc/ctype/local.h (__lc_ctype): Remove declaration.
	(__locale_charset): Declare.
	* libc/ctype/iswalpha.c (iswalpha): Call __locale_charset instead of
	using __lc_ctype directly.  Only compare against the charset alone.
	* libc/ctype/iswblank.c (iswblank): Ditto.
	* libc/ctype/iswcntrl.c (iswcntrl): Ditto.
	* libc/ctype/iswprint.c (iswprint): Ditto.
	* libc/ctype/iswpunct.c (iswpunct): Ditto.
	* libc/ctype/iswspace.c (iswspace): Ditto.
	* libc/ctype/towlower.c (towlower): Ditto.
	* libc/ctype/towupper.c (towupper): Ditto.
	* libc/stdlib/mbtowc_r.c (_mbtowc_r): Ditto.
	* libc/stdlib/wctomb_r.c (_wctomb_r): Ditto.
	* libc/sys/linux/intl/loadmsgcat.c (_nl_init_domain_conv): Call
	__locale_msgcharset instead of __locale_charset.
This commit is contained in:
Corinna Vinschen
2009-03-03 09:28:45 +00:00
parent e81ae92910
commit d6cd9169dc
14 changed files with 456 additions and 244 deletions

View File

@ -45,8 +45,6 @@ static JIS_ACTION JIS_action_table[JIS_S_NUM][JIS_C_NUM] = {
/* we override the mbstate_t __count field for more complex encodings and use it store a state value */
#define __state __count
extern char __lc_ctype[12];
int
_DEFUN (_mbtowc_r, (r, pwc, s, n, state),
struct _reent *r _AND
@ -65,9 +63,9 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
return -2;
#ifdef _MB_CAPABLE
if (strlen (__lc_ctype) <= 1)
if (strlen (__locale_charset ()) <= 1)
{ /* fall-through */ }
else if (!strcmp (__lc_ctype, "C-UTF-8"))
else if (!strcmp (__locale_charset (), "UTF-8"))
{
int ch;
int i = 0;
@ -221,7 +219,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
else
return -1;
}
else if (!strcmp (__lc_ctype, "C-SJIS"))
else if (!strcmp (__locale_charset (), "SJIS"))
{
int ch;
int i = 0;
@ -251,7 +249,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
return -1;
}
}
else if (!strcmp (__lc_ctype, "C-EUCJP"))
else if (!strcmp (__locale_charset (), "EUCJP"))
{
int ch;
int i = 0;
@ -281,7 +279,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
return -1;
}
}
else if (!strcmp (__lc_ctype, "C-JIS"))
else if (!strcmp (__locale_charset (), "JIS"))
{
JIS_STATE curr_state;
JIS_ACTION action;

View File

@ -8,8 +8,6 @@
/* for some conversions, we use the __count field as a place to store a state value */
#define __state __count
extern char __lc_ctype[12];
int
_DEFUN (_wctomb_r, (r, s, wchar, state),
struct _reent *r _AND
@ -22,9 +20,9 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
is 4, as is the case on cygwin. */
wint_t wchar = _wchar;
if (strlen (__lc_ctype) <= 1)
if (strlen (__locale_charset ()) <= 1)
{ /* fall-through */ }
else if (!strcmp (__lc_ctype, "C-UTF-8"))
else if (!strcmp (__locale_charset (), "UTF-8"))
{
if (s == NULL)
return 0; /* UTF-8 encoding is not state-dependent */
@ -106,7 +104,7 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
return -1;
}
}
else if (!strcmp (__lc_ctype, "C-SJIS"))
else if (!strcmp (__locale_charset (), "SJIS"))
{
unsigned char char2 = (unsigned char)wchar;
unsigned char char1 = (unsigned char)(wchar >> 8);
@ -130,7 +128,7 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
}
}
}
else if (!strcmp (__lc_ctype, "C-EUCJP"))
else if (!strcmp (__locale_charset (), "EUCJP"))
{
unsigned char char2 = (unsigned char)wchar;
unsigned char char1 = (unsigned char)(wchar >> 8);
@ -154,7 +152,7 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
}
}
}
else if (!strcmp (__lc_ctype, "C-JIS"))
else if (!strcmp (__locale_charset (), "JIS"))
{
int cnt = 0;
unsigned char char2 = (unsigned char)wchar;