This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: mon_grouping bug


Gerhard Tonn <GerhardTonn at gammatau dot de> writes:

|> Hi,
|> 
|> running the LSB 1.3 testsuite on a platform that has unsigned char as 
|> default, gives a failure during the localisation tests. The mon_grouping 
|> parameter of the LOCALE being tested is defined as 1;2;-1.  After 
|> installation of the LOCALE the command 'locale -k mon_grouping' returns 
|> mon_grouping=1;2;127.
|> 
|> This seems to be a bug in the glibc. The following code fragment in 
|> ld-monetary.c maps the '-1' to 127 which is the value of SCHAR_MAX which is 
|> equal to CHAR_MAX, if char is signed per default.
|> 
|> if (now->tok == tok_minus1)
|>                     {
|>                       if (!ignore_content)
|>                         grouping[act++] = '\177';
|>                     }
|> 
|> The following code fragment in locale.c prints '-1' only if the value equals 
|> CHAR_MAX which is not true on platforms that have unsigned char as default.
|> 
|>  printf ("%d", *val == CHAR_MAX ? -1 : *val);

IMHO the right fix is to change CHAR_MAX to '\177' since that's what's
actually being stored.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab at suse dot de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]