From: Ulrich Drepper Date: Mon, 15 Mar 2004 08:55:28 +0000 (+0000) Subject: Update. X-Git-Tag: upstream/2.20~11136 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f514b6bf2bdb23a144bf9c77ad34cde58f8c607;p=platform%2Fupstream%2Flinaro-glibc.git Update. 2004-03-15 Ulrich Drepper * sysdeps/generic/strcasestr.c (__strcasestr): Optimize use of tolower function. --- diff --git a/ChangeLog b/ChangeLog index 71f7fb5..d24b150 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-03-15 Ulrich Drepper + + * sysdeps/generic/strcasestr.c (__strcasestr): Optimize use of + tolower function. + 2004-03-13 Jakub Jelinek * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_02_known): Add const. diff --git a/sysdeps/generic/strcasestr.c b/sysdeps/generic/strcasestr.c index 6ceb2d7..6327dfa 100644 --- a/sysdeps/generic/strcasestr.c +++ b/sysdeps/generic/strcasestr.c @@ -1,5 +1,5 @@ /* Return the offset of one string within another. - Copyright (C) 1994,1996,1997,1998,1999,2000 Free Software Foundation, Inc. + Copyright (C) 1994, 1996-2000, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,6 +36,13 @@ # include #endif +#ifdef _LIBC +# include +# define TOLOWER(c) __tolower_l (c, loc) +#else +# define TOLOWER(c) _tolower (c) +#endif + typedef unsigned chartype; #undef strcasestr @@ -48,11 +55,14 @@ __strcasestr (phaystack, pneedle) { register const unsigned char *haystack, *needle; register chartype b, c; +#ifdef _LIBC + __locale_t loc = _NL_CURRENT_LOCALE; +#endif haystack = (const unsigned char *) phaystack; needle = (const unsigned char *) pneedle; - b = _tolower (*needle); + b = TOLOWER (*needle); if (b != '\0') { haystack--; /* possible ANSI violation */ @@ -62,9 +72,9 @@ __strcasestr (phaystack, pneedle) if (c == '\0') goto ret0; } - while (_tolower (c) != (int) b); + while (TOLOWER (c) != (int) b); - c = _tolower (*++needle); + c = TOLOWER (*++needle); if (c == '\0') goto foundneedle; ++needle; @@ -80,7 +90,7 @@ __strcasestr (phaystack, pneedle) a = *++haystack; if (a == '\0') goto ret0; - if (_tolower (a) == (int) b) + if (TOLOWER (a) == (int) b) break; a = *++haystack; if (a == '\0') @@ -88,34 +98,34 @@ __strcasestr (phaystack, pneedle) shloop: ; } - while (_tolower (a) != (int) b); + while (TOLOWER (a) != (int) b); jin: a = *++haystack; if (a == '\0') goto ret0; - if (_tolower (a) != (int) c) + if (TOLOWER (a) != (int) c) goto shloop; rhaystack = haystack-- + 1; rneedle = needle; - a = _tolower (*rneedle); + a = TOLOWER (*rneedle); - if (_tolower (*rhaystack) == (int) a) + if (TOLOWER (*rhaystack) == (int) a) do { if (a == '\0') goto foundneedle; ++rhaystack; - a = _tolower (*++needle); - if (_tolower (*rhaystack) != (int) a) + a = TOLOWER (*++needle); + if (TOLOWER (*rhaystack) != (int) a) break; if (a == '\0') goto foundneedle; ++rhaystack; - a = _tolower (*++needle); + a = TOLOWER (*++needle); } - while (_tolower (*rhaystack) == (int) a); + while (TOLOWER (*rhaystack) == (int) a); needle = rneedle; /* took the register-poor approach */