OSDN Git Service

* libc/string/memset.c (memset): Make it safe even if
authorkazu <kazu>
Mon, 25 Nov 2002 20:56:16 +0000 (20:56 +0000)
committerkazu <kazu>
Mon, 25 Nov 2002 20:56:16 +0000 (20:56 +0000)
sizeof (int) = 2.

newlib/ChangeLog
newlib/libc/string/memset.c

index 9cc8bfe..10d5f90 100644 (file)
@@ -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>
 
        * configure.in: Change check for libc/include in ${CC} to
index a5890c8..eceff8e 100644 (file)
@@ -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. */
 
+      /* To avoid sign extention, copy C to an unsigned variable.  */
+      unsigned int d = c & 0xff;
+
       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.  */
-      c &= 0xff;
       if (LBLOCKSIZE == 4)
         {
-          buffer = (c << 8) | c;
+          buffer = (d << 8) | d;
           buffer |= (buffer << 16);
         }
       else
         {
           buffer = 0;
           for (i = 0; i < LBLOCKSIZE; i++)
-           buffer = (buffer << 8) | c;
+           buffer = (buffer << 8) | d;
         }
 
       while (n >= LBLOCKSIZE*4)