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