view doc/posix-functions/setlocale.texi @ 40136:06c22cab9098

setlocale: Work around bug on Android 4.3. * m4/setlocale.m4 (gl_FUNC_SETLOCALE): Test whether setlocale supports the "C" locale. * lib/setlocale.c (setlocale_unixlike): New wrapper for Android. * doc/posix-functions/setlocale.texi: Mention the Android bug.
author Bruno Haible <bruno@clisp.org>
date Fri, 25 Jan 2019 23:26:24 +0100
parents 7a82d5ff8472
children
line wrap: on
line source

@node setlocale
@section @code{setlocale}
@findex setlocale

POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setlocale.html}

Gnulib module: setlocale

Portability problems fixed by Gnulib:
@itemize
@item
On Windows platforms (excluding Cygwin), @code{setlocale(@var{category},NULL)}
ignores the environment variables @code{LC_ALL}, @code{@var{category}}, and
@code{LANG}.
@item
On Windows platforms (excluding Cygwin) and Cygwin 1.5.x,
@code{setlocale(LC_ALL,@var{name})} succeeds and sets the LC_CTYPE category to
@samp{C} when it does not support the encoding, instead of failing.
@item
On Windows platforms (excluding Cygwin), @code{setlocale} understands different
locale names, that are not based on ISO 639 language names and ISO 3166 country
names.
@item
On Android 4.3, which which doesn't have locales, the @code{setlocale} function
always fails.  The replacement, however, supports only the locale names
@code{"C"} and @code{"POSIX"}.
@end itemize

Portability problems not fixed by Gnulib:
@itemize
@item
On Cygwin 1.5.x, which doesn't have locales,
@code{setlocale(LC_ALL,NULL)} always returns @code{"C"}.
@item
On Cygwin 1.7.0, only the charset portion of a locale designation is honored.
@item
On OpenBSD, @code{setlocale(LC_ALL,"")} will only update categories that
are deemed appropriate for the @code{LC_ALL} environment value, even if
there are other categories set to different values in the environment.
In addition any value is accepted for @code{LC_CTYPE}, and so NULL
is never returned to indicate a failure to set locale.
To verify category values, each category must be set individually
with @code{setlocale(LC_COLLATE,"")} etc.
@end itemize