> I still don't much like having a locale-specific wart in the parser > (and the code you give could not work anyway --- for starters, the > first argument of setlocale is not a pointer).
Aw, I see, my code broken. I got confused by locale_......_asign() family if functions. Sure, first argument need to be int. But as you said the code is a wart. > A possible compromise is to apply ASCII downcasing (same as in > keywords.c) for 7-bit-ASCII characters, and apply tolower() only > for character codes above 127. In other words > > unsigned char ch = (unsigned char) ident[i]; > > if (ch >= 'A' && ch <= 'Z') > ch += 'a' - 'A'; > else if (ch > 127 && isupper(ch)) > ch = tolower(ch); > ident[i] = (char) ch; > > In reasonably sane locales this will have the same effects as currently, > while in unsane locales it will ensure that basic-ASCII identifiers are > treated the way we want. If we go this way why not make a special case only and only for 'I' Character and not all 7-bit ASCII: unsigned char ch = (unsigned char) ident[i]; if(ch == (unsigned char)'I') ch = 'i'; else ch = tolower(ch) ident[i] = (char) ch; Will it break any locales? > > regards, tom lane Regards Nicolai ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]