Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 May 2012 10:56:29 +0900 (JST)
From:      Kohji Okuno <okuno.kohji@jp.panasonic.com>
To:        theraven@FreeBSD.org
Cc:        freebsd-current@FreeBSD.org, okuno.kohji@jp.panasonic.com, erik@cederstrand.dk
Subject:   Re: The current libc/locale/toupper.c is mistaken
Message-ID:  <20120511.105629.433001249354722453.okuno.kohji@jp.panasonic.com>
In-Reply-To: <ACBAF2E6-1C82-4CBA-98FA-9E43A95916BA@FreeBSD.org>
References:  <59B6B059-ED46-4C1B-B72D-D6DFA906BFFB@cederstrand.dk> <20120511.104242.19192035427185902.okuno.kohji@jp.panasonic.com> <ACBAF2E6-1C82-4CBA-98FA-9E43A95916BA@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi David,

From: David Chisnall <theraven@FreeBSD.org>

> If you have a test case, I can commit it to the libc++ test suite.
> 
> David

I attached my test source.
This test program shoud output as below.

towupper_l
0049, 0049
0131, 0049
0130, 0130
0069, 0049

towlower_l
0049, 0069
0131, 0131
0130, 0069
0069, 0069

But, when I use original toupper.c, this proguram output as below.

towupper_l
0049, 0049
0131, 0131
0130, 0069
0069, 0049

towlower_l
0049, 0069
0131, 0131
0130, 0069
0069, 0069

Regards,
 Kohji Okuno

> 
> On 10 May 2012, at 21:42, Kohji Okuno wrote:
> 
>> Hi Eric,
>> 
>>> I'm left wondering how this was not caught by the libc++ test
>>> suite. The current toupper.c shouldn't pass
>>> http://llvm.org/svn/llvm-project/libcxx/trunk/test/localization/locales/locale.convenience/conversions/conversions.character/toupper.pass.cpp
>> 
>> This test suite checks only popular characters.
>> __mapupper_ext is used in case of special characters.
>> 
>> For example, Turkish 'i' (0x0131) should convert 'I' (0x49).
>> 
>> Regards,
>> Kohji Okuno
>> 
>> 
>>> Den 10/05/2012 kl. 12.03 skrev Dimitry Andric:
>>> 
>>>> On 2012-05-10 11:02, Kohji Okuno wrote:
>>>>> I think that libc/locale/toupper.c is mistaken.
>>>>> Could you check it?
>>>>> 
>>>>> @@ -51,7 +51,7 @@ ___toupper_l(c, l)
>>>>> {
>>>>>       size_t lim;
>>>>>       FIX_LOCALE(l);
>>>>> -       _RuneRange *rr = &XLOCALE_CTYPE(l)->runes->__maplower_ext;
>>>>> +       _RuneRange *rr = &XLOCALE_CTYPE(l)->runes->__mapupper_ext;
>>>>>       _RuneEntry *base, *re;
>>>>> 
>>>>>       if (c < 0 || c == EOF)
>>>> 
>>>> Yes, this definitely looks like a copy/paste error, introduced here:
>>>> 
>>>> http://svnweb.freebsd.org/base/head/lib/libc/locale/toupper.c?r1=165903&r2=227753
>>>> 
>>>> I'll commit the fix tonight (CEST), if David isn't faster than me. :)
>>> 
>>> I'm left wondering how this was not caught by the libc++ test suite. The current toupper.c shouldn't pass http://llvm.org/svn/llvm-project/libcxx/trunk/test/localization/locales/locale.convenience/conversions/conversions.character/toupper.pass.cpp
>>> 
>>> Thanks,
>>> Erik_______________________________________________
>>> freebsd-current@freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>>> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120511.105629.433001249354722453.okuno.kohji>