setlocale howto

Dmitry Morozovsky marck at rinet.ru
Sat Aug 12 17:24:38 UTC 2006


On Sat, 12 Aug 2006, Andrey V. Elsukov wrote:

AVE> >On Sat, Aug 12, 2006 at 05:51:01PM +0400, Andrey V. Elsukov wrote:
AVE> >>     for(i = 0; i < sizeof(buf); i++)
AVE> >>         buf[i] = (char)toupper(buf[i]);
AVE> >
AVE> >         buf[i] = (char)toupper((unsigned char)buf[i]);
AVE> >Standard integer promotion promotes KOI8-R char codes like 0xd4 into 0xffffffd4.
AVE> >Since such codepoints are not defined for KOI8-R, toupper returns them
AVE> >unchaged, as specified in documentation.
AVE> 
AVE> Thanks, this works! But why this example works on Linux without type conversions?

Linux has unsigned chars by default, while FreeBSD (and other current *BSDs) 
signed.

Even large projects like PostgreSQL stepped into this trap at least once ;-)

Sincerely,
D.Marck                                     [DM5020, MCK-RIPE, DM3-RIPN]
------------------------------------------------------------------------
*** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck at rinet.ru ***
------------------------------------------------------------------------


More information about the freebsd-stable mailing list