isspace() & i18n

egor duda deo@logos-m.ru
Thu May 31 23:19:00 GMT 2001


Hi!

Thursday, 31 May, 2001 Christopher Faylor cgf@redhat.com wrote:

CF> This has been checked in.  It doesn't solve the larger issue of
CF> if this is a newlib bug or not but I think that this is a correct
CF> fix nonetheless.

unfortunately, no. first, as isspace() wants int, this is equivalent
to (int)(unsigned int)(char)(-33) == -33

correct solution would be 'isspace ((unsigned char) *s), but i've
found out that it doesn't work, too! newlib's defining _ctype_ as
char[257], but of those 257 chars only 129 are initialized.

i'm still failing to produce a "full" patch to implement [-128,256]
range, and if i can't find a reason why it's not working, i'd post an
"intermediate" one.

i'm trying to define
_ctype_b[128+256]={...};
(dllexport) _ctype_=_ctype_b + 127;

but, for some reason it doesn't work. i suspect it has somthing to do
with relocation of data exported from dll, but to be sure, i have to
put my hands a bit deeper into assembled code.

>>Index: path.cc
>>===================================================================
>>RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
>>retrieving revision 1.139
>>diff -u -p -r1.139 path.cc
>>--- path.cc    2001/05/14 02:52:12     1.139
>>+++ path.cc    2001/05/30 15:45:49
>>@@ -2929,7 +2929,7 @@ chdir (const char *dir)
>>      whitespace to SetCurrentDirectory.  This doesn't work too well
>>      with other parts of the API, though, apparently.  So nuke trailing
>>      white space. */
>>-  for (s = strchr (dir, '\0'); --s >= dir && isspace (*s); )
>>+  for (s = strchr (dir, '\0'); --s >= dir && isspace ((unsigned int)*s); )
>>     *s = '\0';
>> 
>>   if (path.error)

Egor.            mailto:deo@logos-m.ru ICQ 5165414 FidoNet 2:5020/496.19




More information about the Cygwin-developers mailing list