OSDN Git Service

2009-04-06 Mike Burgess <wizardsguild@earthlink.net>
authorjjohnstn <jjohnstn>
Mon, 6 Apr 2009 22:42:07 +0000 (22:42 +0000)
committerjjohnstn <jjohnstn>
Mon, 6 Apr 2009 22:42:07 +0000 (22:42 +0000)
        * libc/string/strncasecmp.c: Optimized rewrite.

newlib/ChangeLog
newlib/libc/string/strncasecmp.c

index 4de7d55..13ba84f 100644 (file)
@@ -1,3 +1,7 @@
+2009-04-06  Mike Burgess  <wizardsguild@earthlink.net>
+
+       * libc/string/strncasecmp.c: Optimized rewrite.
+
 2009-04-06  Ken Werner  <ken.werner@de.ibm.com>
 
        * libc/include/sys/features.h: Undefine _POSIX_TIMERS for spu.
index c877ba5..c2eb5b8 100644 (file)
@@ -49,16 +49,15 @@ _DEFUN (strncasecmp, (s1, s2, n),
        _CONST char *s2 _AND
        size_t n)
 {
-  if (n == 0)
-    return 0;
-
-  while (n-- != 0 && tolower(*s1) == tolower(*s2))
+  _CONST unsigned char *ucs1 = (_CONST unsigned char *) s1;
+  _CONST unsigned char *ucs2 = (_CONST unsigned char *) s2;
+  int d = 0;
+  for ( ; n != 0; n--)
     {
-      if (n == 0 || *s1 == '\0' || *s2 == '\0')
-       break;
-      s1++;
-      s2++;
+      _CONST int c1 = tolower(*ucs1++);
+      _CONST int c2 = tolower(*ucs2++);
+      if (((d = c1 - c2) != 0) || (c2 == '\0'))
+        break;
     }
-
-  return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
+  return d;
 }