* libc/string/memset.c (memset): Make it safe even if
sizeof (int) = 2.
This commit is contained in:
parent
60d4d42f4f
commit
f24585c6bb
|
@ -1,3 +1,8 @@
|
||||||
|
2002-11-25 Kazu Hirata <kazu@cs.umass.edu>
|
||||||
|
|
||||||
|
* libc/string/memset.c (memset): Make it safe even if
|
||||||
|
sizeof (int) = 2.
|
||||||
|
|
||||||
2002-11-22 Joe Buehler <jbuehler@hekimian.com>
|
2002-11-22 Joe Buehler <jbuehler@hekimian.com>
|
||||||
|
|
||||||
* configure.in: Change check for libc/include in ${CC} to
|
* configure.in: Change check for libc/include in ${CC} to
|
||||||
|
|
|
@ -64,21 +64,23 @@ _DEFUN (memset, (m, c, n),
|
||||||
{
|
{
|
||||||
/* If we get this far, we know that n is large and m is word-aligned. */
|
/* If we get this far, we know that n is large and m is word-aligned. */
|
||||||
|
|
||||||
|
/* To avoid sign extention, copy C to an unsigned variable. */
|
||||||
|
unsigned int d = c & 0xff;
|
||||||
|
|
||||||
aligned_addr = (unsigned long*)m;
|
aligned_addr = (unsigned long*)m;
|
||||||
|
|
||||||
/* Store C into each char sized location in BUFFER so that
|
/* Store D into each char sized location in BUFFER so that
|
||||||
we can set large blocks quickly. */
|
we can set large blocks quickly. */
|
||||||
c &= 0xff;
|
|
||||||
if (LBLOCKSIZE == 4)
|
if (LBLOCKSIZE == 4)
|
||||||
{
|
{
|
||||||
buffer = (c << 8) | c;
|
buffer = (d << 8) | d;
|
||||||
buffer |= (buffer << 16);
|
buffer |= (buffer << 16);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer = 0;
|
buffer = 0;
|
||||||
for (i = 0; i < LBLOCKSIZE; i++)
|
for (i = 0; i < LBLOCKSIZE; i++)
|
||||||
buffer = (buffer << 8) | c;
|
buffer = (buffer << 8) | d;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (n >= LBLOCKSIZE*4)
|
while (n >= LBLOCKSIZE*4)
|
||||||
|
|
Loading…
Reference in New Issue