X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/9385eb3d10ebe5eb398c52040ec3dbfba9b0cdcf..refs/heads/master:/string/FreeBSD/strcasecmp.c diff --git a/string/FreeBSD/strcasecmp.c b/string/FreeBSD/strcasecmp.c index 6f400d7..8299c16 100644 --- a/string/FreeBSD/strcasecmp.c +++ b/string/FreeBSD/strcasecmp.c @@ -10,10 +10,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. @@ -35,7 +31,9 @@ static char sccsid[] = "@(#)strcasecmp.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/string/strcasecmp.c,v 1.6 2002/08/30 15:40:01 robert Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/string/strcasecmp.c,v 1.8 2009/02/03 17:58:20 danger Exp $"); + +#include "xlocale_private.h" #include #include @@ -43,35 +41,51 @@ __FBSDID("$FreeBSD: src/lib/libc/string/strcasecmp.c,v 1.6 2002/08/30 15:40:01 r 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 +strcasecmp(const char *s1, const char *s2) +{ + return strcasecmp_l(s1, s2, __current_locale()); } int -strncasecmp(s1, s2, n) +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(const char *s1, const char *s2, size_t n) +{ + return strncasecmp_l(s1, s2, n, __current_locale()); +}