isprint() vs diakriticka znamenka

Cejka Rudolf cejkar na dcse.fee.vutbr.cz
Pondělí Září 7 10:50:27 CEST 1998


Michal Hucik (chaky na goliash.inext.cz) wrote:
: Cejka Rudolf (cejkar na dcse.fee.vutbr.cz) wrote:
: > Michal Hucik (chaky na goliash.inext.cz) wrote:

: [ ... ]
: > ze nekde pri inicializaci programu (ostatne stale jde o docela casty jev,
: > takze si z toho nic nedelejte) chybi radek:

: > 	setlocale(LC_CTYPE, "");

: > nebo
: > 	setlocale(LC_ALL, "");

: Ano, pokud tohle vlozim do funkce ve ktere je pouzit isprint(), tak uz se to
: chova korektne. Zkusil jsem se podivat na zavatek programu do funkce main()
: a nasel jsem tam volani funkce gtk_set_locale() coz je v podstate to samo
: jako setlocale(), jenze pokud je tohle volani (at uz setlocale(), nebo
: gtk_set_locale()) umisteno v main(), tak ten isprint nechodi spravne ...
: zacne se chobat korektne az ve chvili, kdy nektere z techto volani umistim
: primo do funkce ze ktere je volan isprint() ? Proc?

Tak tohle uz je skutecny namet na bug-report. Je velmi divoke pouzivat
nastavovani lokalizaci (a jejich zmenu) uvnitr programu - jen ve vyjimecnych
pripadech muze jit o zamernou situaci. Staci si uvedomit, ze po volani
setlocale() se zacinaji odpovidajici funkce z ctype.h a strcoll + strxfrm
a dalsi chovat uplne jinak, coz muze zpusobovat spoustu problemu, zvlaste
vnitrnich nekonzistenci v programu.

V tomto bode uz nevim - s gtk jsem si nehral. Trochu se obavam, ze chyba
muze byt bud primo v gtk nebo nekde v knihovnim mismasi libc x glibc.

--------------------------------------------------------------------------
Rudolf Cejka  (cejkar na dcse.fee.vutbr.cz;  http://www.fee.vutbr.cz/~cejkar)
Technical University of Brno, Faculty of El. Engineering and Comp. Science
Bozetechova 2, 612 66  Brno, Czech Republic


Další informace o konferenci Linux