Ivan Skytte Jørgensen wrote:

I just checked values -128..255 on Solaris 8 with isdigit() and isalpha():
Plain program:
        -128..-1: bogus;  0..127: ok;   128..255: all-0/ok
Program with setlocale(LC_CTYPE,""):
        -128..-1: bogus;  0..127: ok;   128..255: all-0/ok (??)
Program with setlocale(LC_CTYPE,"") and LC_CTYPE=en_US.UTF-8
        -128..-1: bogus;  0..127: ok;   128..255: all-0/ok
Program with setlocale(LC_CTYPE,"") and LC_CTYPE=nl_BE.ISO8859-1
        -128..-1: bogus;  0..127: ok;   128..255: ok

So I can confirm that the is..() functions are quite weird on Solaris for negative values. The default character type on Solaris is signed.

So I agree: the casts should stay. A comment somewhere in the sources on why it is done would be a good idea. Allthough I wonder what can go wrong in nedit if isdigit() etc. return random but consistent values.

A better way probably would be to avoid stroul here (because it forces use of a "plain char") and use sscanf directly into an int (because that's what isdigit takes).

If that doesn't work, another solution would be to wrap to isupper (etc) so that it can be called without the cast. The wrapper would do the proper fixups and then the explanation would only need to be in one palce.
--
NEdit Develop mailing list - [email protected]
http://www.nedit.org/mailman/listinfo/develop

Reply via email to