rolland Sat Oct 22 01:52:55 2005 EDT Modified files: /php-src/ext/standard string.c Log: - php_u_stristr: Code comments http://cvs.php.net/diff.php/php-src/ext/standard/string.c?r1=1.499&r2=1.500&ty=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.499 php-src/ext/standard/string.c:1.500 --- php-src/ext/standard/string.c:1.499 Thu Oct 20 15:25:52 2005 +++ php-src/ext/standard/string.c Sat Oct 22 01:52:53 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.499 2005/10/20 19:25:52 rolland Exp $ */ +/* $Id: string.c,v 1.500 2005/10/22 05:52:53 rolland Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -1924,20 +1924,33 @@ /* Have to do this by hand since lower-casing can change lengths by changing codepoints, and an offset within the lower-case & - upper-case strings might be different codepoints + upper-case strings might be different codepoints. + + Find an occurrence of the first codept of 't' in 's', and + starting from this point, match the rest of the codepts of 't' + with those in 's'. Comparisons are performed against lower-case + equivalents of the codepoints being matched. + + 'i' & 'j' are indices used for extracting codepts 'ch1' & + 'ch2'. 'last' is offset in 's' where the search for 't' + started, and indicates beginning of 't' in 's' for a successful + match. */ + i = 0; while (i <= (s_len-t_len)) { last = i; U16_NEXT(s, i, s_len, ch1); - U16_GET(t, 0, 0, t_len, ch2); + j = 0; + U16_NEXT(t, j, t_len, ch2); if (u_tolower(ch1) == u_tolower(ch2)) { - j = 0; - U16_FWD_1(t, j, t_len); while (j < t_len) { U16_NEXT(s, i, s_len, ch1); U16_NEXT(t, j, t_len, ch2); if (u_tolower(ch1) != u_tolower(ch2)) { + /* U16_NEXT() incr 'i' beyond 'ch1', re-adjust to + restart compare + */ U16_BACK_1(s, 0, i); break; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php