Invalid tm_zone from localtime() when TZ is not set

Hans-Bernhard Bröker HBBroeker@t-online.de
Thu May 26 17:21:00 GMT 2016


Am 26.05.2016 um 08:54 schrieb KOBAYASHI Shinji:
> On Wed, 25 May 2016 22:02:50 +0200, Hans-Bernhard Bröker wrote:
>> On May 25 11:28, KOBAYASHI Shinji wrote:

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

That restriction is artificial, at best.  I might go so far as to say 
it's a direct standard violation since, according to the C Standard, the 
<ctype.h> macros/functions are defined for the entire range of unsigned 
char, not just ASCII's 0 ... 127.

It's also untrue.  Once you set the locale and the console character set 
accordingly, Cygwin's isupper() does work for characters outside the 
7-bit ASCII range, too:

$ ./tisupper.exe a A b B ö Ö ß
a: isupper=0
A: isupper=1
b: isupper=0
B: isupper=1
ö: isupper=0
Ö: isupper=1
ß: isupper=0

This is with a ISO-Latin-15 mintty, and LANG set to de_DE (note: no 
UTF-8), running this program:

#include <stdio.h>
#include <ctype.h>
#include <locale.h>

int main(int argc, char **argv)
{
	int i = 0;
	
	setlocale(LC_ALL, "");
	for (i = 1; i < argc; i++) {
		printf("%c: isupper=%d\n",
		       argv[i][0],
		       isupper((unsigned char)argv[i][0])
		      );
	}
	return 0;
}

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

So does the implementation in Cygwin.  The result of my little test is 
influenced by locale.  E.g. in Russian locale, Ö is no longer classified 
an upper-case letter.

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



More information about the Cygwin mailing list