Re: cvs: php-src / NEWS /ext/standard string.c /ext/standard/tests/strings stristr.phpt strstr.phpt
| From: | Marcus Boerger | Date: | Tue, 09 Aug 2005 21:04:37 +0000 |
| Subject: | Re: cvs: php-src / NEWS /ext/standard string.c /ext/standard/tests/strings stristr.phpt strstr.phpt | ||
| References: | 1 2 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-33247@lists.php.net to get a copy of this message | ||
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 <johannes@php.net> 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