[Bug 269] Many compiler warnings with gcc 4.0

Steven Simon simon.s at apple.com
Wed Aug 31 22:18:14 CEST 2005


The casts are a mixed bag. They can be distracting, but they document  
expectations, as Frank pointed out.
I'll present another option, also a bit ugly, and see how it goes.
We could use a union that has accessors for each value type. The code  
would have to use the appropriate one for the attribute.
union {
char str[MAX_STRING_LEN];			// or sstr for signed
uint8_t data[MAX_STRING_LEN];		// or ustr for unsigned
} value;

Steve



On Aug 31, 2005, at 12:38 PM, Frank Cusack wrote:

> On August 31, 2005 4:47:16 PM +1000 Paul TBBle Hampson  
> <Paul.Hampson at Pobox.com> wrote:
>> On Tue, Aug 30, 2005 at 01:15:45PM -0700, Steven Simon wrote:
>>> I tend to think this is the wrong approach. By convention, C  
>>> strings  are
>>> signed and Pascal strings (I know, nobody uses them anymore) are   
>>> unsigned.
>>> If char defaults to unsigned, it could cause more problems  than  
>>> it solves.
>>> We want the compiler to tell us if we're mixing C- strings and  
>>> data buffers.
>
> Absolutely, but this only comes into play when promoting char to int,
> as is done with varargs functions, e.g. sprintf().  (There is no such
> thing as a char argument to a varargs function; all chars are promoted
> to int, and unsigned chars to unsigned ints.)
>
> One common place this happens is for debug output, when printing the
> contents of buffers.
>
> <http://www.freshsources.com/1994017B.HTM> is a good page describing
> the difference between signed and unsigned char.
>
>> Chars are unsigned on Linux PowerPC. I don't believe there's  
>> anything that
>> depends on chars being signed that doesn't explicitly declare  
>> such, as I ran
>> FreeRADIUS on LinuxPPC without issues for a few years. I think all
>> signed-char assumptions were therefore shaken out a fair while ago.
> ...
>
> To say that chars are unsigned on Linux PPC is meaningless.   
> Whether chars
> are signed or unsigned is up to the compiler.  Now it may be the  
> case that
> gcc on Linux PPC does treat char as unsigned, but I highly doubt it.
>
> Linux PPC itself may have lots of code that explicitly has unsigned  
> char
> data, but that doesn't affect application code at all.  Even  
> whether or
> not glibc uses explicit unsigned char internally doesn't affect  
> applications
> since behavior must still conform to the various standards.  Wherever
> char *'s are used, promotion isn't done so signed vs. unsigned doesn't
> matter.  (And current standards call for void * instead of char *  
> almost
> everywhere.)
>
> My point is that FR running successfully on Linux PPC, which may use
> unsigned char everywhere internally (I'll take your word on it) does
> not imply anything about how char might be treated in application  
> code.
>
> Forcing unsigned char would be a mistake, IMHO.  I personally think  
> casts
> are good.  One man's ugly notation is another man's inline  
> documentation.
>
> -frank
> - List info/subscribe/unsubscribe? See http://www.freeradius.org/ 
> list/devel.html




More information about the Freeradius-Devel mailing list