OSDN Git Service

Fix a bug in memcmp -- don't terminate the compare on a NULL, keep
authorEric Andersen <andersen@codepoet.org>
Wed, 22 Nov 2000 21:18:34 +0000 (21:18 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 22 Nov 2000 21:18:34 +0000 (21:18 -0000)
comparing up to n bytes, till the are found to be either the same or
differernt.

libc/string/string.c

index eb5c177..fdf8481 100644 (file)
@@ -2,6 +2,9 @@
 /* Copyright (C) 1995,1996 Robert de Bath <rdebath@cix.compulink.co.uk>
  * This file is part of the Linux-8086 C library and is distributed
  * under the GNU Library General Public License.
+ *
+ * Many of the functions in this file have been rewritten for correctness
+ * (but not necessarily speed) by Erik Andersen <andersee@debian.org>
  */
 
 #include <string.h>
@@ -263,21 +266,16 @@ void *memchr(const void *str, int c, size_t len)
 #ifdef L_memcmp
 int memcmp(const void *s1, const void *s2, size_t len)
 {
-       unsigned register char c1 = '\0';
-       unsigned register char c2 = '\0';
-
-       register char *str1 = (char *) s1;
-       register char *str2 = (char *) s2;
+       unsigned char *c1 = (unsigned char *)s1;
+       unsigned char *c2 = (unsigned char *)s2;
 
-       while (len > 0) {
-               c1 = (unsigned char) *str1++;
-               c2 = (unsigned char) *str2++;
-               if (c1 == '\0' || c1 != c2)
-                       return c1 - c2;
-               len--;
+       while (len--) {
+               if (*c1 != *c2) 
+                       return *c1 - *c2;
+               c1++;
+               c2++;
        }
-
-       return c1 - c2;
+       return 0;
 }
 #endif