strcasestr.c.patch   [plain text]


--- strcasestr.c.orig	2003-05-20 15:23:54.000000000 -0700
+++ strcasestr.c	2005-02-18 18:48:55.000000000 -0800
@@ -37,6 +37,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/lib/libc/string/strcasestr.c,v 1.3 2002/03/21 18:44:54 obrien Exp $");
 
+#include "xlocale_private.h"
+
 #include <ctype.h>
 #include <string.h>
 
@@ -44,22 +46,31 @@
  * Find the first occurrence of find in s, ignore case.
  */
 char *
-strcasestr(s, find)
+strcasestr_l(s, find, loc)
 	const char *s, *find;
+	locale_t loc;
 {
 	char c, sc;
 	size_t len;
 
+	NORMALIZE_LOCALE(loc);
 	if ((c = *find++) != 0) {
-		c = tolower((unsigned char)c);
+		c = tolower_l((unsigned char)c, loc);
 		len = strlen(find);
 		do {
 			do {
 				if ((sc = *s++) == 0)
 					return (NULL);
-			} while ((char)tolower((unsigned char)sc) != c);
-		} while (strncasecmp(s, find, len) != 0);
+			} while ((char)tolower_l((unsigned char)sc, loc) != c);
+		} while (strncasecmp_l(s, find, len, loc) != 0);
 		s--;
 	}
 	return ((char *)s);
 }
+
+char *
+strcasestr(s, find)
+	const char *s, *find;
+{
+	return strcasestr_l(s, find, __current_locale());
+}