[patch] memset.c: Make memset safe even if sizeof (int) = 2.

Christopher Faylor cgf@redhat.com
Mon Nov 25 12:34:00 GMT 2002


[taking over for Jeff Johnston for a week or so]
On Mon, Nov 25, 2002 at 03:24:58PM -0500, Kazu Hirata wrote:
>Attached is a patch to make memset safe even if sizeof (int) = 2.
>
>A part of memset says
>
>  buffer = (c << 8) | c;
>  buffer |= (buffer << 16);
>
>Playing with H8 port, where sizeof (int) = 2, shows that if c = 0x80
>is given, then the value of buffer would be 0xffff8080 instead of
>0x80808080 because "(c << 8) | c", which is 0x8080, is sign-extended
>to a 32-bit signed integer.

This looks like a good catch, but the usual idiom for this is to do
something like:

           unsigned int d = c & 0xff;

to insure that there is no sign extension.

If you agree with this, then feel free to check in a variation on your
below patch.  Btw, could you fix the ChangeLog?  It seems to have a
typo "sizeof (2) = 2".

cgf



More information about the Newlib mailing list