[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libfsimage: Make it build on NetBSD



On 23/9/07 12:12, "Bastian Blank" <bastian@xxxxxxxxxxxx> wrote:

> On Fri, Sep 21, 2007 at 02:39:46PM +0200, Christoph Egger wrote:
>> -  if (!*dirname || isspace (*dirname))
>> +  if (!*dirname || isspace ((uint8_t)*dirname))
> 
> According to C99, the definition is "int isspace(int c)". Even char can
> be converted implicitely to int. Which problem do you intend to fix with
> that? If this functions are incorrectly defined on BSD, fix that their.

The ISO spec is pretty unambiguous: "The c argument is an int, the value of
which the application shall ensure is a character representable as an
unsigned char or equal to the value of the macro EOF. If the argument has
any other value, the behavior is undefined."

If we sensibly take 'representable' to mean 'representable with the same
integer value', then the casts are clearly needed for compliance. This
interpretation even makes some sense, since it explicitly disallows
collision between character code 0xff and EOF (usually -1).

And read glibc's ctype.h -- it goes to some effort to support 'signed char'
input, but makes it clear this is "for broken old programs".

This seems to be one of the ugly corners of the C spec where the truth is
not very palatable. :-)

 -- Keir



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.