]> git.saurik.com Git - apple/libc.git/blobdiff - string/FreeBSD/strcasecmp.c.patch
Libc-391.tar.gz
[apple/libc.git] / string / FreeBSD / strcasecmp.c.patch
diff --git a/string/FreeBSD/strcasecmp.c.patch b/string/FreeBSD/strcasecmp.c.patch
new file mode 100644 (file)
index 0000000..810edb7
--- /dev/null
@@ -0,0 +1,71 @@
+--- strcasecmp.c.orig  2003-05-20 15:23:54.000000000 -0700
++++ strcasecmp.c       2005-02-18 18:46:40.000000000 -0800
+@@ -37,41 +37,62 @@
+ #include <sys/cdefs.h>
+ __FBSDID("$FreeBSD: src/lib/libc/string/strcasecmp.c,v 1.6 2002/08/30 15:40:01 robert Exp $");
++#include "xlocale_private.h"
++
+ #include <strings.h>
+ #include <ctype.h>
+ typedef unsigned char u_char;
+ int
+-strcasecmp(s1, s2)
++strcasecmp_l(s1, s2, loc)
+       const char *s1, *s2;
++      locale_t loc;
+ {
+       const u_char
+                       *us1 = (const u_char *)s1,
+                       *us2 = (const u_char *)s2;
+-      while (tolower(*us1) == tolower(*us2++))
++      NORMALIZE_LOCALE(loc);
++      while (tolower_l(*us1, loc) == tolower_l(*us2++, loc))
+               if (*us1++ == '\0')
+                       return (0);
+-      return (tolower(*us1) - tolower(*--us2));
++      return (tolower_l(*us1, loc) - tolower_l(*--us2, loc));
+ }
+ int
+-strncasecmp(s1, s2, n)
++strcasecmp(s1, s2)
++      const char *s1, *s2;
++{
++      return strcasecmp_l(s1, s2, __current_locale());
++}
++
++int
++strncasecmp_l(s1, s2, n, loc)
+       const char *s1, *s2;
+       size_t n;
++      locale_t loc;
+ {
++      NORMALIZE_LOCALE(loc);
+       if (n != 0) {
+               const u_char
+                               *us1 = (const u_char *)s1,
+                               *us2 = (const u_char *)s2;
+               do {
+-                      if (tolower(*us1) != tolower(*us2++))
+-                              return (tolower(*us1) - tolower(*--us2));
++                      if (tolower_l(*us1, loc) != tolower_l(*us2++, loc))
++                              return (tolower_l(*us1, loc) - tolower_l(*--us2, loc));
+                       if (*us1++ == '\0')
+                               break;
+               } while (--n != 0);
+       }
+       return (0);
+ }
++
++int
++strncasecmp(s1, s2, n)
++      const char *s1, *s2;
++      size_t n;
++{
++      return strncasecmp_l(s1, s2, n, __current_locale());
++}