We quite clearly agreed to a total freeze while Andrei and Dmitry merge the unicode stuff. It's a *huge* patch, so let's please respect the time they are investing into this and keep our f***ing hands off the repos until they're done.
--Wez. On 8/9/05, Marcus Boerger <[EMAIL PROTECTED]> wrote: > 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