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