Subject: ctype "(int)" casting (Re: pkg_select upgrade)
To: Jachym Holecek <freza@liberouter.org>
From: Martin S. Weber <Ephaeton@gmx.net>
List: tech-userlevel
Date: 03/17/2005 08:12:11
On Thu, Mar 17, 2005 at 07:29:41AM +0100, Jachym Holecek wrote:
> > Build failed on NetBSD/amd64.
> >
> > [...]
> > 
> > I think we have two options.
> > Casting a variable to int in pkgselect source code or in ctype.h
> > 
> > Option #1 would be like this:
> > In ftpio.c file,
> > -                               if (ftprc && isdigit(buf[match.rm_so+1]))
> > +                               if (ftprc && isdigit((int)buf[match.rm_so+1]))
> > 
> > And here is option #2:
> > In /usr/src/include/ctype.h file,
> > -#define isdigit(c)      ((int)((_ctype_ + 1)[(c)] & _N))
> > +#define isdigit(c)      ((int)((_ctype_ + 1)[(int)(c)] & _N))
> 
> isdigit(3) says the prototype is "int isdigit(int c);", so #1 would seem
> correct.
> 

True, and thus, was it a function, C would do the cast (int promotion 
as in #2) for us.  That's something I wanted to ask about on userlevel 
for quite some time already... Same applies to the to* functions 
of ctype, too.

Is relying on C to make

char c = <whatever>, tolower(c) 

work w/o complaint a user error ?

-Martin