This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 2/3] Use strdiff in strcasecmp.
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Date: Wed, 13 May 2015 12:04:02 +0200
- Subject: Re: [PATCH 2/3] Use strdiff in strcasecmp.
- Authentication-results: sourceware.org; auth=none
- References: <20150513085810 dot GA31782 at domone>
Hi, this optimizes strcasecmp to look for first mismatch which would
likely fail in caseless case. We don't have to handle encoding as
comparison is done bytewise.
Is this ok? Now there isn't performance improvement as strdiff isn't yet
optimized. I will add optimized strdiff in next patch.
* string/strcasecmp.c (__strcasecmp): Use strdiff.
diff --git a/string/strcasecmp.c b/string/strcasecmp.c
index 6b14912..5d1e27e 100644
--- a/string/strcasecmp.c
+++ b/string/strcasecmp.c
@@ -41,6 +41,10 @@
# define LOCALE_PARAM_DECL
#endif
+#define STRING_TYPE char
+#define USTRING_TYPE unsigned char
+#include <string/strdiff.h>
+
/* Compare S1 and S2, ignoring case, returning less than, equal to or
greater than zero if S1 is lexicographically less than,
equal to or greater than S2. */
@@ -53,12 +57,13 @@ __strcasecmp (s1, s2 LOCALE_PARAM)
#if defined _LIBC && !defined USE_IN_EXTENDED_LOCALE_MODEL
__locale_t loc = _NL_CURRENT_LOCALE;
#endif
+
+ STRDIFF_L (&s1, &s2, __cet_8bit);
+
const unsigned char *p1 = (const unsigned char *) s1;
const unsigned char *p2 = (const unsigned char *) s2;
int result;
- if (p1 == p2)
- return 0;
while ((result = TOLOWER (*p1) - TOLOWER (*p2++)) == 0)
if (*p1++ == '\0')