Bug nalezen: isprint() vs diakriticka znamenka

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Pondělí Září 7 19:10:04 CEST 1998


On Mon, 7 Sep 1998, Michal Hucik wrote:

> Ne, problem byl v tom, ze v urcite casti programu zmenil locales na 'C' aby
> mel zajisteno ze desetinna tecka bude teckou a nikoliv carkou. Bohuzel menil
> LC_ALL a stacilo zmenit jen LC_NUMERIC, takze kdyz se v nasledujici funkci
> zavolal test isprint(), tak neprobehl korektne ....

Chyba je hlavne v tom, ze setlocale() nastavuje  nejaky globalni stav,
kterym se pak ridi vsechny mozne i nemozne funkce, coz znamena, ze
kdyz chce nekdo pracovat ve vice locales najednou (coz je bohuzel ne tak
ridky jev), tak musi prepinat a prepinat, misto aby proste pri volani
dane funkce uvedl pozadovany kontext. Proste nekdo usetril x clovekohodin
prace tim, ze zajistil, ze programy jsou tak nejak internacionalizovany
pouze volanim setlocale(), a promrhal y >> x tim, ze to ted musi kazdy
druhy program nejak obchazet.

Navic to jeste strasnym zpusobem podporuje monoliticnost libc, ze ktere
pak vyplyvaji ty problemy jako LANG=../../../../dev/port...

Obavam se, ze spravnym resenim je zgruntu predelat to rozhrani...

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"You can't be truly paranoid unless you're sure they have already got you."



Další informace o konferenci Linux