This is the mail archive of the cygwin mailing list for the Cygwin 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: Invalid tm_zone from localtime() when TZ is not set

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
- 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

> 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



Problem reports:
Unsubscribe info:

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