Subject: Re: isxxx() and toupper() usage changes
To: Jason Thorpe <email@example.com>
From: David Laight <firstname.lastname@example.org>
Date: 10/27/2004 22:00:31
On Wed, Oct 27, 2004 at 01:31:47PM -0700, Jason Thorpe wrote:
> On Oct 27, 2004, at 12:59 PM, David Laight wrote:
> >Fix a load of international alphabet problems with isxxx() and
> >Change isspace(*char_ptr) to isspace(*char_ptr & 0xff) so that the
> >piece of memory is looked at for the bit mask.
> >gcc optimises out the '& 0xff' (on i386 at least).
> >Fixes problems found by gcc when the splurious (int) cast is removed
> >from the #defines in ctype.h
> Uh... the right piece of memory would be looked at anyway because of
> the promotion rules, right?
> I just don't see how this change is even remotely "correct". Is this
> actually recommended usage of these functions??
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.
So if you have a signed char you have to do something to it in order
not to get the 'undefined' behaviour.
David Laight: email@example.com