Subject: Assming char == signed char?
To: None <cagney@highland.com.au>
From: None <s.k.stevens@ic.ac.uk>
List: tech-ports
Date: 06/19/1995 13:13:00
Andrew Cagney writes:
> Briefly,
>
> Has the NetBSD source files ever been built on a machine where `char' is
> really `unsigned char'?
Yes, us ;-) (NetBSD/arm??). This has in fact been the cause of a few problems,
but as we fix them we're noting them down for correction in the independent
sources.
> I have the feeling that it it hasn't been. I
> ask because I've stumbled across code of the form:
>
> if (tty->a_member_of_type_char == -1)
The most common example of a char (in our case unsigned) being compared with
a signed value is during argument processing, ie:
char c;
while((c = getopt(argc, argv, "BNRWb:ers:w")) != -1)
<...>
We're generally changing the declaration of c from char to int (since
getopt() returns an int...
> which, if char is unsigned, is a little pointless :-) (this was in the
> kernel, exactly where is at home :-( ).
We're collecting them up... Apparently lots of these signed char assumptions
were cleared out a while ago. There were none (or *very* few) found in the
kernel source, but they're quite common in the program sources.
Any chance of telling us where your example came from ;-)
> As an aside is the correct fix:
>
> (signed char)tty->a_member_of_type_char == -1
> or
> tty->a_member_of_type_char == (char)(-1)
>
Er. Open to debate I think. We tend to fix them on a case by case basis,
choosing the neatest fix appropriate.
> Andrew
Cheers Scott
--
Scott Stevens <s.k.stevens@ic.ac.uk> Tel: 0171 594 6943 or x46943
Analyst/Programmer, Cluster Support, Computer Centre, Imperial College
The other diners didn't take much notice, even when Death leaned back and lit a
rather fine pipe. Someone with smoke curling out of their eye sockets takes
some ignoring, but everyone managed it. - Mort, Terry Pratchett