OSDN Git Service

Mark Robson noticed that our strcasecmp() behaviour was not
authorEric Andersen <andersen@codepoet.org>
Tue, 12 Feb 2002 20:28:12 +0000 (20:28 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 12 Feb 2002 20:28:12 +0000 (20:28 -0000)
standards compliant.  Brian Stafford then provided these new
implementations, which apprear to properly follow SUSv2.
 -Erik

libc/string/strcasecmp.c
libc/string/strncasecmp.c

index 0ec81f6..e0d1117 100644 (file)
@@ -6,16 +6,16 @@
 #include <string.h>
 #include <ctype.h>
 
-int strcasecmp( const char *s, const char *d)
+int strcasecmp (const char *a, const char *b)
 {
-       for (;;) {
-               if (*s != *d) {
-                       if (tolower(*s) != tolower(*d))
-                               return *s - *d;
-               } else if (*s == '\0')
-                       break;
-               s++;
-               d++;
-       }
-       return 0;
+    register int n;
+
+    while (*a == *b || (n = tolower (*a) - tolower (*b)) == 0)
+    {
+       if (*a == '\0')
+           return 0;
+       a++, b++;
+    }
+    return n;
 }
+
index ba73e6f..a1bb155 100644 (file)
@@ -6,17 +6,18 @@
 #include <string.h>
 #include <ctype.h>
 
-int strncasecmp( const char *s, const char *d, size_t l)
+int strncasecmp (const char *a, const char *b, size_t len)
 {
-       while (l > 0) {
-               if (*s != *d) {
-                       if (tolower(*s) != tolower(*d))
-                               return *s - *d;
-               } else if (*s == '\0')
-                       return 0;
-               s++;
-               d++;
-               l--;
-       }
+    register int n;
+
+    if (len < 1)
        return 0;
+    while (*a == *b || (n = tolower (*a) - tolower (*b)) == 0)
+    {
+       if (*a == '\0' || --len < 1)
+           return 0;
+       a++, b++;
+    }
+    return n;
 }
+