[PATCH] Read locale settings from environment
Jeff Johnston
jjohnstn@redhat.com
Wed Feb 25 20:10:00 GMT 2009
Corinna Vinschen wrote:
> On Feb 20 13:09, Corinna Vinschen wrote:
>
>> Ok, here's my new setlocale implementation. It fixes the following
>> problems:
>> [...]
>> - Per POSIX allow the required "POSIX" locale. Map it to the "C" locale
>> as on Linux.
>>
>> - If locale is "", honor the environment in the order required by POSIX
>> for all supported categories.
>>
>
> Apart from that, would it be ok to change setlocale() and subsequent
> functions using __lc_ctype (e.g. mbtowc_r, wctomb_r, iswXXX) so that all
> POSIX compliant LC_XXX environment variable settings are taken? The
> currently accepted locales
>
> C[-codeset]
>
> are non-POSIX. The POSIX variant is
>
> [language[_territory][.codeset][@modifier]]
>
> Of course we should keep recognizing the C[-codeset] for backward
> compatibility but I think we should not stick to them.
>
> Actually all the related functions only rely on the charset part of the
> setting, not the actual language. So, what we could do is to split away
> the charset part along the lines of what is already done in the
> LC_MESSAGES part of the code and only check for that in the subsequent
> functions. Instead of checking against __lc_ctype these functions could
> check for, say, __lc_charset. The LC_CTYPE setting could then reflect
> the real setting of the environment. For instance:
>
> LC_ALL=POSIX
>
> ==> __lc_ctype == C
> __lc_charset = ISO-8859 (!)
>
> LC_ALL=en_US.UTF-8
>
> ==> __lc_ctype == en_US.UTF-8
> __lc_charset = UTF-8
>
> LC_ALL=jp_JP.EUCJP
>
> ==> __lc_ctype == jp_JP.EUCJP
> __lc_charset = EUCJP
>
> LC_ALL=de
>
> ==> __lc_ctype == de
> __lc_charset = ISO-8859 (!)
>
> LC_ALL=fr_FR.ISO-8859-15
>
> ==> __lc_ctype == fr_FR.ISO-8859-15
> __lc_charset = ISO-8859 (!)
>
> Actually the __lc_charset could be a single character like I for ISO,
> U for UTF, E for EUCJP, etc, to simplify the checks in mbtowc_r and the
> others.
>
>
> What do you say?
>
>
Ok. I think the charset should be full instead of single character.
-- Jeff J.
> Corinna
>
>
More information about the Newlib
mailing list