From owner-freebsd-current@FreeBSD.ORG Fri May 11 01:58:14 2012 Return-Path: Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3E392106566C; Fri, 11 May 2012 01:58:14 +0000 (UTC) (envelope-from okuno.kohji@jp.panasonic.com) Received: from smtp.mei.co.jp (smtp.mei.co.jp [133.183.100.20]) by mx1.freebsd.org (Postfix) with ESMTP id EBF288FC17; Fri, 11 May 2012 01:58:12 +0000 (UTC) Received: from mail-gw.jp.panasonic.com ([157.8.1.157]) by smtp.mei.co.jp (8.12.11.20060614/3.7W/kc-maile12) with ESMTP id q4B1w8N1002243; Fri, 11 May 2012 10:58:08 +0900 (JST) Received: from epochmail.jp.panasonic.com ([157.8.1.130]) by mail.jp.panasonic.com (8.11.6p2/3.7W/kc-maili17) with ESMTP id q4B1w9307999; Fri, 11 May 2012 10:58:09 +0900 Received: by epochmail.jp.panasonic.com (8.12.11.20060308/3.7W/lomi13) id q4B1w9sm015722; Fri, 11 May 2012 10:58:09 +0900 Received: from localhost by lomi13.jp.panasonic.com (8.12.11.20060308/3.7W) with ESMTP id q4B1w8Sq015686; Fri, 11 May 2012 10:58:08 +0900 Date: Fri, 11 May 2012 10:58:05 +0900 (JST) Message-Id: <20120511.105805.752311254854609466.okuno.kohji@jp.panasonic.com> To: theraven@FreeBSD.org From: Kohji Okuno In-Reply-To: <20120511.105629.433001249354722453.okuno.kohji@jp.panasonic.com> References: <20120511.104242.19192035427185902.okuno.kohji@jp.panasonic.com> <20120511.105629.433001249354722453.okuno.kohji@jp.panasonic.com> Organization: Panasonic Corporation X-Mailer: Mew version 6.4 on Emacs 23.4 / Mule 6.0 (HANACHIRUSATO) Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Fri_May_11_10_58_05_2012_127)--" Content-Transfer-Encoding: 7bit Cc: freebsd-current@FreeBSD.org, okuno.kohji@jp.panasonic.com, erik@cederstrand.dk Subject: Re: The current libc/locale/toupper.c is mistaken X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 May 2012 01:58:14 -0000 ----Next_Part(Fri_May_11_10_58_05_2012_127)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, I'm sorry. I forgot to attach a file. Regards, Kohji Okuno > Hi David, > > From: David Chisnall > >> 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" ----Next_Part(Fri_May_11_10_58_05_2012_127)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="test.c" #include #include #include #include #include int main() { int i; wint_t test[] = {0x0049, 0x0131, 0x0130, 0x0069}; wint_t ret; locale_t x; x = newlocale(0x1f, "tr_TR", NULL); printf("towupper_l\n"); for (i = 0; i < sizeof(test)/sizeof(wint_t); i++) { ret = towupper_l(test[i], x); printf("%04x, %04x\n", test[i], ret); } printf("\n"); printf("towlower_l\n"); for (i = 0; i < sizeof(test)/sizeof(wint_t); i++) { ret = towlower_l(test[i], x); printf("%04x, %04x\n", test[i], ret); } exit(0); } ----Next_Part(Fri_May_11_10_58_05_2012_127)----