Syntax setlocale(3)

Jaroslav Benkovsky benkovsk na pha.pvt.cz
Čtvrtek Leden 23 09:52:57 CET 1997


Jan Kasprzak wrote:
> 
>         Zdravim,
> 
>         pri pokusech o rozchozeni locales v X11 jsem narazil na tento
> problem: V libX11 je na nekolika mistech volana funkce setlocale(3)
> priblizne timto zpusobem:
> 
>         char *charset = setlocale(LC_CTYPE, NULL);
> 
>         A ocekava se, ze v charset pak bude jmeno prislusneho
> locale typu LC_CTYPE. Nekolika pokusy jsem zjistil, ze setlocale
> vraci NULL misto toho, aby vracelo "cz_CZ.ISO8859-2" nebo aspon "C".
> 
>         Podle meho nazoru je chyba v Xlibu: Manova stranka setlocale(3)
> na Linuxu pise, ze locale se bere z environmentu v pripade, ze druhy
> parametr setlocale je "" (a nikoliv NULL, jak to vola Xlib).
> 
>         Ma nekdo nejakou normu, kde by se dalo vycist, jak se ma
> setlocale(3) volat na POSIXovych systemech? Muj system je Linux 2.1,
> libc 5.4.17, XFree86 3.2 (==X11R6.1 s nekolika upravami). Nerad
> bych obvinoval Linux, ze je nestandardni :-)

POSIX Programmer's Guide by Donald Lewine:

char* setlocale(int category, const char *locale);

...

The /locale/ argument is the name of a locale. There are a few special
locale names:

"C" : make everything work as defined in the C standard....
"POSIX" : Same as "C"
"" : selects the native locale. This is done using the following steps:
    (... pak se tam pise, z jakych envvaru se to bere...)
NULL: Returns the current locale without changing it
...
...
the setlocale() function returns a pointer to the name of the current
locale for the selected category. If setlocale() is given an
unknown locale, NULL is returned.

Takze bych rekl, ze se chova divne Linux :-((( a nebo neco
nastavujes spatne

					Edheldil


Další informace o konferenci Linux