Bug nalezen: isprint() vs diakriticka znamenka
Cejka Rudolf
cejkar na dcse.fee.vutbr.cz
Pondělí Září 7 15:33:54 CEST 1998
Michal Hucik (chaky na goliash.inext.cz) 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 ....
: setlocale (LC_ALL, "C");
: status = real_source_write (project_name, directory);
: setlocale (LC_ALL, saved_locale);
Coz znamena, ze fce isprint() je volana ve funkci real_source_write()?
(O tom tu zatim nepadlo ani slovo, ze ano?)
Situace se ale stale nemeni. V tomto konkretnim pripade zmena LC_ALL
na LC_NUMERIC je jen zaplata na zaplatu. Misto, aby se v celem zdrojovem
textu pro funkci real_source_write() a jeji vnorena volani na kazdem
radku opakovalo "Pozor, tady neocekavejte zadne lokalizovane vypisy!",
bude se muset vsude opakovat "Pozor, tady budou nelokalizovane
numericke vypisy!". Takze az zas nekdo bude delat dalsi upravy do zdrojaku,
zase urcite nekdy narazi. Proto jedine spravne reseni je volani
setlocale() presunout az k radkum, ktere maji by nelokalizovane.
(Vzpominate, jak jsem psal o vnitrnich nekonzistencich programu?.
Pri pouhe nahrade LC_ALL -> LC_NUMERIC vznika dalsi hrozba.)
--------------------------------------------------------------------------
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