Hello Wez, this is 6.0 but Andrei should claim cvs lock though :-)
marcus Tuesday, August 9, 2005, 10:59:51 PM, you wrote: > Err, aren't we in a feature freeze? > --Wez. > On 8/9/05, Johannes Schlüter <[EMAIL PROTECTED]> wrote: >> johannes Tue Aug 9 16:49:19 2005 EDT >> >> Added files: >> /php-src/ext/standard/tests/strings stristr.phpt >> >> Modified files: >> /php-src NEWS >> /php-src/ext/standard string.c >> /php-src/ext/standard/tests/strings strstr.phpt >> Log: >> - Added option to strstr() and stristr() to get a particular haystack >> component >> >> http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2030&r2=1.2031&ty=u >> Index: php-src/NEWS >> diff -u php-src/NEWS:1.2030 php-src/NEWS:1.2031 >> --- php-src/NEWS:1.2030 Tue Aug 9 11:07:18 2005 >> +++ php-src/NEWS Tue Aug 9 16:49:12 2005 >> @@ -6,6 +6,8 @@ >> . Added CURLINFO_HEADER_OUT to facilitate request retrieval. >> - Added an optional parameter to parse_url() to allow retrieval of distinct >> URL >> components. (Ilia) >> +- Added an optional parameter to strstr() and stristr() for retrieval of >> either >> + the part of haystack before or after first occurence of needle. (Johannes) >> >> ?? ??? 2005, PHP 5.1 >> - Upgraded PCRE library to version 6.2. (Andrei) >> http://cvs.php.net/diff.php/php-src/ext/standard/string.c?r1=1.445&r2=1.446&ty=u >> Index: php-src/ext/standard/string.c >> diff -u php-src/ext/standard/string.c:1.445 >> php-src/ext/standard/string.c:1.446 >> --- php-src/ext/standard/string.c:1.445 Wed Aug 3 10:08:13 2005 >> +++ php-src/ext/standard/string.c Tue Aug 9 16:49:18 2005 >> @@ -18,7 +18,7 @@ >> >> +----------------------------------------------------------------------+ >> */ >> >> -/* $Id: string.c,v 1.445 2005/08/03 14:08:13 sniper Exp $ */ >> +/* $Id: string.c,v 1.446 2005/08/09 20:49:18 johannes Exp $ */ >> >> /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ >> >> @@ -1433,52 +1433,60 @@ >> } >> /* }}} */ >> >> -/* {{{ proto string stristr(string haystack, string needle) >> +/* {{{ proto string stristr(string haystack, string needle[, bool part]) >> Finds first occurrence of a string within another, case insensitive */ >> PHP_FUNCTION(stristr) >> { >> - zval **haystack, **needle; >> + char *haystack; >> + long haystack_len; >> + zval *needle; >> + zend_bool part = 0; >> char *found = NULL; >> int found_offset; >> char *haystack_orig; >> char needle_char[2]; >> >> - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, >> &needle) == FAILURE) { >> - WRONG_PARAM_COUNT; >> + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|b", >> &haystack, &haystack_len, &needle, &part) == FAILURE) { >> + return; >> } >> >> - SEPARATE_ZVAL(haystack); >> - SEPARATE_ZVAL(needle); >> - >> - convert_to_string_ex(haystack); >> + SEPARATE_ZVAL(&needle); >> >> - haystack_orig = estrndup(Z_STRVAL_PP(haystack), >> Z_STRLEN_PP(haystack)); >> + haystack_orig = estrndup(haystack, haystack_len); >> >> - if (Z_TYPE_PP(needle) == IS_STRING) { >> - if (!Z_STRLEN_PP(needle)) { >> + if (Z_TYPE_P(needle) == IS_STRING) { >> + if (!Z_STRLEN_P(needle)) { >> php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty >> delimiter."); >> efree(haystack_orig); >> RETURN_FALSE; >> } >> >> - found = php_stristr(Z_STRVAL_PP(haystack), >> - Z_STRVAL_PP(needle), >> - >> Z_STRLEN_PP(haystack), >> - Z_STRLEN_PP(needle)); >> + found = php_stristr(haystack, >> + Z_STRVAL_P(needle), >> + haystack_len, >> + Z_STRLEN_P(needle)); >> } else { >> - convert_to_long_ex(needle); >> - needle_char[0] = (char) Z_LVAL_PP(needle); >> + convert_to_long_ex(&needle); >> + needle_char[0] = (char) Z_LVAL_P(needle); >> needle_char[1] = 0; >> >> - found = php_stristr(Z_STRVAL_PP(haystack), >> + found = php_stristr(haystack, >> needle_char, >> - >> Z_STRLEN_PP(haystack), >> + haystack_len, >> 1); >> } >> >> if (found) { >> - found_offset = found - Z_STRVAL_PP(haystack); >> - RETVAL_STRINGL(haystack_orig + found_offset, >> Z_STRLEN_PP(haystack) - found_offset, 1); >> + found_offset = found - haystack; >> + if (part) { >> + char *ret; >> + ret = emalloc(found_offset + 1); >> + strncpy(ret, haystack_orig, found_offset); >> + ret[found_offset] = '\0'; >> + RETVAL_STRINGL(ret , found_offset, 0); >> + } else { >> + RETVAL_STRINGL(haystack_orig + found_offset, >> haystack_len - found_offset, 1); >> + } >> } else { >> RETVAL_FALSE; >> } >> @@ -1487,45 +1495,54 @@ >> } >> /* }}} */ >> >> -/* {{{ proto string strstr(string haystack, string needle) >> +/* {{{ proto string strstr(string haystack, string needle[, bool part]) >> Finds first occurrence of a string within another */ >> PHP_FUNCTION(strstr) >> { >> - zval **haystack, **needle; >> + char *haystack; >> + long haystack_len; >> + zval *needle; >> + zend_bool part = 0; >> char *found = NULL; >> char needle_char[2]; >> long found_offset; >> - >> - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, >> &needle) == FAILURE) { >> - WRONG_PARAM_COUNT; >> - } >> >> - convert_to_string_ex(haystack); >> + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|b", >> &haystack, &haystack_len, &needle, &part) == FAILURE) { >> + return; >> + } >> >> - if (Z_TYPE_PP(needle) == IS_STRING) { >> - if (!Z_STRLEN_PP(needle)) { >> + if (Z_TYPE_P(needle) == IS_STRING) { >> + if (!Z_STRLEN_P(needle)) { >> php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty >> delimiter."); >> RETURN_FALSE; >> } >> >> - found = php_memnstr(Z_STRVAL_PP(haystack), >> - Z_STRVAL_PP(needle), >> - Z_STRLEN_PP(needle), >> - Z_STRVAL_PP(haystack) + >> Z_STRLEN_PP(haystack)); >> + found = php_memnstr(haystack, >> + Z_STRVAL_P(needle), >> + Z_STRLEN_P(needle), >> + haystack + haystack_len); >> } else { >> - convert_to_long_ex(needle); >> - needle_char[0] = (char) Z_LVAL_PP(needle); >> + convert_to_long_ex(&needle); >> + needle_char[0] = (char) Z_LVAL_P(needle); >> needle_char[1] = 0; >> >> - found = php_memnstr(Z_STRVAL_PP(haystack), >> + found = php_memnstr(haystack, >> needle_char, >> 1, >> - Z_STRVAL_PP(haystack) + >> Z_STRLEN_PP(haystack)); >> + haystack + haystack_len); >> } >> >> if (found) { >> - found_offset = found - Z_STRVAL_PP(haystack); >> - RETURN_STRINGL(found, Z_STRLEN_PP(haystack) - found_offset, >> 1); >> + found_offset = found - haystack; >> + if (part) { >> + char *ret; >> + ret = emalloc(found_offset + 1); >> + strncpy(ret, haystack, found_offset); >> + ret[found_offset] = '\0'; >> + RETURN_STRINGL(ret , found_offset, 0); >> + } else { >> + RETURN_STRINGL(found, haystack_len - found_offset, >> 1); >> + } >> } else { >> RETURN_FALSE; >> } >> http://cvs.php.net/diff.php/php-src/ext/standard/tests/strings/strstr.phpt?r1=1.2&r2=1.3&ty=u >> Index: php-src/ext/standard/tests/strings/strstr.phpt >> diff -u php-src/ext/standard/tests/strings/strstr.phpt:1.2 >> php-src/ext/standard/tests/strings/strstr.phpt:1.3 >> --- php-src/ext/standard/tests/strings/strstr.phpt:1.2 Wed May 19 04:45:23 >> 2004 >> +++ php-src/ext/standard/tests/strings/strstr.phpt Tue Aug 9 16:49:19 >> 2005 >> @@ -14,6 +14,8 @@ >> var_dump(@strstr("a", "")); >> var_dump(@strstr("", "a")); >> var_dump(md5(@strstr("\\\\a\\", "\\a"))); >> + var_dump(strstr("test string", " ", false)); >> + var_dump(strstr("test string", " ", true)); >> ?> >> --EXPECT-- >> string(11) "test string" >> @@ -28,3 +30,5 @@ >> bool(false) >> bool(false) >> string(32) "6ec19f52f0766c463f3bb240f4396913" >> +string(7) " string" >> +string(4) "test" >> >> http://cvs.php.net/co.php/php-src/ext/standard/tests/strings/stristr.phpt?r=1.1&p=1 >> Index: php-src/ext/standard/tests/strings/stristr.phpt >> +++ php-src/ext/standard/tests/strings/stristr.phpt >> --TEST-- >> stristr() function >> --FILE-- >> <?php >> var_dump(stristr("tEsT sTrInG", "tEsT")); >> var_dump(stristr("tEsT sTrInG", "stRiNg")); >> var_dump(stristr("tEsT sTrInG", "stRiN")); >> var_dump(stristr("tEsT sTrInG", "t S")); >> var_dump(stristr("tEsT sTrInG", "g")); >> var_dump(md5(stristr("te".chr(0)."st", chr(0)))); >> var_dump(@stristr("", "")); >> var_dump(@stristr("a", "")); >> var_dump(@stristr("", "a")); >> var_dump(md5(@stristr("\\\\a\\", "\\a"))); >> var_dump(stristr("tEsT sTrInG", " ", false)); >> var_dump(stristr("tEsT sTrInG", " ", true)); >> ?> >> --EXPECT-- >> string(11) "tEsT sTrInG" >> string(6) "sTrInG" >> string(6) "sTrInG" >> string(8) "T sTrInG" >> string(1) "G" >> string(32) "7272696018bdeb2c9a3f8d01fc2a9273" >> bool(false) >> bool(false) >> bool(false) >> string(32) "6ec19f52f0766c463f3bb240f4396913" >> string(7) " sTrInG" >> string(4) "tEsT" >> >> -- >> PHP CVS Mailing List (http://www.php.net/) >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> Best regards, Marcus -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
