On Tue, 18 Nov 2003, Andres Kroonmaa wrote:

> > > - if (isupper(*s1))
> > > + if (isupper((int)(char)*s1))
> > 
> > This cast it not correct. The input to isupper and any other ctype
> > functions should be a unsigned char manually or implicitly casted to int..
> 
>  is it harmful? I thought, if I cast just (int)*s1 then it might take
>  4 bytes from *s1 instead of 1. If I cast just (char), then the warning
>  remains valid.

It it harmful, but not for the reasons you worry about. The cast hides the 
problem instead of correcting it.

>  anyway, what would be correct cast here?

(int)(unsigned char)

alternatively s1 is changed to a unsigned char * type and the cast is 
just (int).


> > > ../../HEAD3/snmplib/mib.c: In function `lc_cmp':
> > > ../../HEAD3/snmplib/mib.c:130: warning: subscript has type `char'
> > 
> > Valid varning.. the source type of the index should most likely be an 
> > unsigned char..
> 
>  I'm not sure why gcc or squid compile script considered this as fatal..

Probably because of -Werror...

> > If you compile without --enable-esi Squid won't define ESI, but if your 
> > system headers pollute the namespace with a ESI define then you are 
> > screwed and all references to ESI within Squid needs to be replaced by 
> > another define or again someone at Sun needs some bashing..
> 
>  Well, what path we should take? ;)

Both.

Work around the problem in Squid and yell at the OS provider for providing
such crappy software.

Unforunately I have to leave the yelling part to you as it is a little
hard to get thru to most vendors if you do not have a support contract or
don't even use their stuff..

Regards
Henrik

Reply via email to