From 09ce807bf1f97c13faa735b2712251902f42b18e Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Sat, 21 Jul 2001 03:26:31 +0000 Subject: Drop memchr() in php_memnstr in favor of manual scanning. This reduces the complexity of the function and is about 20% faster on Linux/x86. --- ext/standard/php_string.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'ext') diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index 7e0ea30dcb..7143ccf3be 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -123,12 +123,18 @@ static inline char * php_memnstr(char *haystack, char *needle, int needle_len, char *end) { char *p = haystack; - char *s = NULL; - - for(; p <= end - needle_len && - (s = (char*)memchr(p, *needle, end - p - needle_len + 1)); p = s + 1) { - if(memcmp(s, needle, needle_len) == 0) - return s; + char first = *needle; + + /* let end point to the last character where needle may start */ + end -= needle_len; + + while (p <= end) { + while (*p != first) + if (++p > end) + return NULL; + if (memcmp(p, needle, needle_len) == 0) + return p; + p++; } return NULL; } -- cgit v1.2.1