On Wed, 25 May 2016 22:02:50 +0200, Hans-Bernhard Bröker wrote: > On May 25 11:28, KOBAYASHI Shinji wrote: >> The intention of the following code in tzsetwall() should be to pick >> up UPPERCASE letters "in ASCII range": > Are you sure you're not mixing ASCII with '8-bit character' range there?
I'm not sure if non-ASCII 8-bit characters are allowed as TZ names. I just guessed the intention from the fact isupper() is used, and from the description of isupper() man page: - isupper is a macro which classifies ASCII integer values by table lookup. - It is defined only when isascii(c) is true or c is EOF. However, the implementation of isupper() seems to work for 8-bit characters even if isascii() is false. Does the man page need some changes? > A proper solution may have to be more like this: > int mapped = wctob(*src); > /* this call is safe now because of how wctob() works: */ > if (isupper(mapped)) { > *dst++ = (unsigned char)mapped; > } Thank you for pointing out wctob(). I'm in favor of fixing this way. On Wed, 25 May 2016 10:44:30 +0200, Corinna Vinschen wrote: > However, testing this with GLibc it turns out that GLibc's towlower does not > transform the character but returns 0xff21. Can anybody explain to me why? It seems that it depends on locale. The man page (on Linux) says: The behavior of towlower() depends on the LC_CTYPE category of the current locale. I observed that it returns 0xff41 when LANG=ja_JP.UTF-8, and 0xff21 when LANG=C. Cygwin's implementation (and man page) does not seem to depend on locale. Regards, KOBAYASHI Shinji. -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple