This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]