Re: cvs: php-src / NEWS /ext/pcre php_pcre.c php_pcre.h /main SAPI.c /win32 sendmail.c
| From: | Andrei Zmievski | Date: | Tue, 15 Mar 2005 17:49:10 +0000 |
| Subject: | Re: cvs: php-src / NEWS /ext/pcre php_pcre.c php_pcre.h /main SAPI.c /win32 sendmail.c | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-15452@lists.php.net to get a copy of this message | ||
Uh, would be nice to check with me before making this patch..
On Sat, 12 Mar 2005, Andrey Hristov wrote:
> andrey Sat Mar 12 07:03:51 2005 EDT
>
> Modified files:
> /php-src NEWS
> /php-src/ext/pcre php_pcre.c php_pcre.h
> /php-src/main SAPI.c
> /php-src/win32 sendmail.c
> Log:
> FR 32275 - fifth parameter to preg_replace() to count number of replaces
> made.
> #it would be nice if someone of the doc team documents it. thanks!
>
>
>
> http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1850&r2=1.1851&ty=u
> Index: php-src/NEWS
> diff -u php-src/NEWS:1.1850 php-src/NEWS:1.1851
> --- php-src/NEWS:1.1850 Tue Mar 8 01:38:58 2005
> +++ php-src/NEWS Sat Mar 12 07:03:48 2005
> @@ -8,6 +8,8 @@
> . ext/mnogosearch (Jani, Derick)
> . ext/w32api (Jani, Derick)
> . ext/yp (Jani, Derick)
> +- Added additional fifth parameter count to preg_replace_callback() and
> + preg_replace() to count the number of replacements made. FR #32275. (Andrey)
> - Changed stream_filter_(ap|pre)pend() to return resource. (Sara)
> - Changed mysqli_exception and sqlite_exception to use RuntimeException as base
> if SPL extension is present. (Georg, Marcus)
>
> http://cvs.php.net/diff.php/php-src/ext/pcre/php_pcre.c?r1=1.164&r2=1.165&ty=uÐS'¬©û.ø@KrÅF
>
> Index: php-src/ext/pcre/php_pcre.c
> diff -u php-src/ext/pcre/php_pcre.c:1.164 php-src/ext/pcre/php_pcre.c:1.165
> --- php-src/ext/pcre/php_pcre.c:1.164 Fri Dec 24 14:45:54 2004
> +++ php-src/ext/pcre/php_pcre.c Sat Mar 12 07:03:49 2005
> @@ -16,7 +16,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: php_pcre.c,v 1.164 2004/12/24 19:45:54 tony2001 Exp $ */
> +/* $Id: php_pcre.c,v 1.165 2005/03/12 12:03:49 andrey Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -807,7 +807,7 @@
> PHPAPI char *php_pcre_replace(char *regex, int regex_len,
> char *subject, int subject_len,
> zval *replace_val, int is_callable_replace,
> - int *result_len, int limit TSRMLS_DC)
> + int *result_len, int limit, int *replace_count TSRMLS_DC)
> {
> pcre *re = NULL; /* Compiled regular expression */
> pcre_extra *extra = NULL; /* Holds results of studying */
> @@ -887,9 +887,12 @@
> piece = subject + start_offset;
>
> if (count > 0 && (limit == -1 || limit > 0)) {
> + if (replace_count) {
> + ++*replace_count;
> + }
> /* Set the match location in subject */
> match = subject + offsets[0];
> -
> +
> new_len = *result_len + offsets[0] - start_offset; /* part before the match */
>
> /* If evaluating, do it and add the return string's length */
> @@ -1019,7 +1022,7 @@
>
> /* {{{ php_replace_in_subject
> */
> -static char *php_replace_in_subject(zval *regex, zval *replace, zval **subject, int
> *result_len, int limit, zend_bool is_callable_replace TSRMLS_DC)
> +static char *php_replace_in_subject(zval *regex, zval *replace, zval **subject, int
> *result_len, int limit, zend_bool is_callable_replace, int *replace_count TSRMLS_DC)
> {
> zval **regex_entry,
> **replace_entry = NULL,
> @@ -1076,7 +1079,8 @@
> replace_value,
> is_callable_replace,
> result_len,
> - limit TSRMLS_CC)) != NULL) {
> + limit,
> + replace_count TSRMLS_CC)) != NULL) {
> efree(subject_value);
> subject_value = result;
> subject_len = *result_len;
> @@ -1094,7 +1098,8 @@
> replace,
> is_callable_replace,
> result_len,
> - limit TSRMLS_CC);
> + limit,
> + replace_count TSRMLS_CC);
> return result;
> }
> }
> @@ -1108,17 +1113,20 @@
> **replace,
> **subject,
> **limit,
> - **subject_entry;
> + **subject_entry,
> + **zcount;
> char *result;
> int result_len;
> int limit_val = -1;
> char *string_key;
> ulong num_key;
> char *callback_name = NULL;
> + int replace_count=0;
> + int *replace_count_ptr=NULL;
>
> /* Get function parameters and do error-checking. */
> - if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 4 ||
> - zend_get_parameters_ex(ZEND_NUM_ARGS(), ®ex, &replace, &subject, &limit)
> == FAILURE) {
> + if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 5 ||
> + zend_get_parameters_ex(ZEND_NUM_ARGS(), ®ex, &replace, &subject, &limit,
> &zcount) == FAILURE) {
> WRONG_PARAM_COUNT;
> }
> if (!is_callable_replace && Z_TYPE_PP(replace) == IS_ARRAY &&
> Z_TYPE_PP(regex) != IS_ARRAY) {
> @@ -1147,6 +1155,9 @@
> convert_to_long_ex(limit);
> limit_val = Z_LVAL_PP(limit);
> }
> + if (ZEND_NUM_ARGS() > 4) {
> + replace_count_ptr =& replace_count;
> + }
>
> if (Z_TYPE_PP(regex) != IS_ARRAY)
> convert_to_string_ex(regex);
> @@ -1160,7 +1171,7 @@
> and add the result to the return_value array. */
> while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) ==
> SUCCESS) {
> SEPARATE_ZVAL(subject_entry);
> - if ((result = php_replace_in_subject(*regex, *replace, subject_entry, &result_len,
> limit_val, is_callable_replace TSRMLS_CC)) != NULL) {
> + if ((result = php_replace_in_subject(*regex, *replace, subject_entry, &result_len,
> limit_val, is_callable_replace, replace_count_ptr TSRMLS_CC)) != NULL) {
> /* Add to return array */
> switch(zend_hash_get_current_key(Z_ARRVAL_PP(subject), &string_key, &num_key, 0))
> {
> @@ -1176,16 +1187,20 @@
>
> zend_hash_move_forward(Z_ARRVAL_PP(subject));
> }
> - }
> - else { /* if subject is not an array */
> - if ((result = php_replace_in_subject(*regex, *replace, subject, &result_len, limit_val,
> is_callable_replace TSRMLS_CC)) != NULL) {
> + } else { /* if subject is not an array */
> + if ((result = php_replace_in_subject(*regex, *replace, subject, &result_len, limit_val,
> is_callable_replace, replace_count_ptr TSRMLS_CC)) != NULL) {
> RETVAL_STRINGL(result, result_len, 0);
> }
> - }
> + }
> + if (replace_count_ptr) {
> + zval_dtor(*zcount);
> + ZVAL_LONG(*zcount, replace_count);
> + }
> +
> }
> /* }}} */
>
> -/* {{{ proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit])
> +/* {{{ proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [,
> count]])
> Perform Perl-style regular expression replacement. */
> PHP_FUNCTION(preg_replace)
> {
> @@ -1193,7 +1208,7 @@
> }
> /* }}} */
>
> -/* {{{ proto string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int
> limit])
> +/* {{{ proto string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int
> limit [, count]])
> Perform Perl-style regular expression replacement using replacement callback. */
> PHP_FUNCTION(preg_replace_callback)
> {
>
> http://cvs.php.net/diff.php/php-src/ext/pcre/php_pcre.h?r1=1.39&r2=1.40&ty=u
> Index: php-src/ext/pcre/php_pcre.h
> diff -u php-src/ext/pcre/php_pcre.h:1.39 php-src/ext/pcre/php_pcre.h:1.40
> --- php-src/ext/pcre/php_pcre.h:1.39 Sat Jan 31 22:02:47 2004
> +++ php-src/ext/pcre/php_pcre.h Sat Mar 12 07:03:50 2005
> @@ -16,7 +16,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: php_pcre.h,v 1.39 2004/02/01 03:02:47 moriyoshi Exp $ */
> +/* $Id: php_pcre.h,v 1.40 2005/03/12 12:03:50 andrey Exp $ */
>
> #ifndef PHP_PCRE_H
> #define PHP_PCRE_H
> @@ -41,7 +41,7 @@
> PHP_FUNCTION(preg_quote);
> PHP_FUNCTION(preg_grep);
>
> -PHPAPI char *php_pcre_replace(char *regex, int regex_len, char *subject, int subject_len,
> zval *replace_val, int is_callable_replace, int *result_len, int limit TSRMLS_DC);
> +PHPAPI char *php_pcre_replace(char *regex, int regex_len, char *subject, int subject_len,
> zval *replace_val, int is_callable_replace, int *result_len, int limit, int *replace_count
> TSRMLS_DC);
> PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *options TSRMLS_DC);
> PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *preg_options,
> int *coptions TSRMLS_DC);
>
>
> http://cvs.php.net/diff.php/php-src/main/SAPI.c?r1=1.197&r2=1.198&ty=u
> Index: php-src/main/SAPI.c
> diff -u php-src/main/SAPI.c:1.197 php-src/main/SAPI.c:1.198
> --- php-src/main/SAPI.c:1.197 Sat Mar 5 11:41:13 2005
> +++ php-src/main/SAPI.c Sat Mar 12 07:03:50 2005
> @@ -18,7 +18,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: SAPI.c,v 1.197 2005/03/05 16:41:13 moriyoshi Exp $ */
> +/* $Id: SAPI.c,v 1.198 2005/03/12 12:03:50 andrey Exp $ */
>
> #include <ctype.h>
> #include <sys/stat.h>
> @@ -637,7 +637,7 @@
> result = php_pcre_replace("/realm=\"(.*?)\"/i", 16,
> ptr, ptr_len,
> repl_temp,
> - 0, &result_len, -1 TSRMLS_CC);
> + 0, &result_len, -1, NULL TSRMLS_CC);
> if(result_len==ptr_len) {
> efree(result);
> sprintf(Z_STRVAL_P(repl_temp), "realm=\\1-%ld\\2", myuid);
> @@ -645,7 +645,7 @@
> result = php_pcre_replace("/realm=([^\\s]+)(.*)/i", 21,
> ptr, ptr_len,
> repl_temp,
> - 0, &result_len, -1 TSRMLS_CC);
> + 0, &result_len, -1, NULL TSRMLS_CC);
> if(result_len==ptr_len) {
> char *lower_temp = estrdup(ptr);
> char conv_temp[32];
>
> http://cvs.php.net/diff.php/php-src/win32/sendmail.c?r1=1.62&r2=1.63&ty=u
> Index: php-src/win32/sendmail.c
> diff -u php-src/win32/sendmail.c:1.62 php-src/win32/sendmail.c:1.63
> --- php-src/win32/sendmail.c:1.62 Fri Feb 25 00:57:41 2005
> +++ php-src/win32/sendmail.c Sat Mar 12 07:03:50 2005
> @@ -17,7 +17,7 @@
> *
> */
>
> -/* $Id: sendmail.c,v 1.62 2005/02/25 05:57:41 hyanantha Exp $ */
> +/* $Id: sendmail.c,v 1.63 2005/03/12 12:03:50 andrey Exp $ */
>
> #include "php.h" /*php specific */
> #include <stdio.h>
> @@ -182,7 +182,8 @@
> replace,
> 0,
> &result_len,
> - -1 TSRMLS_CC);
> + -1,
> + NULL TSRMLS_CC);
> if (NULL == result) {
> FREE_ZVAL(replace);
> return NULL;
> @@ -195,7 +196,8 @@
> replace,
> 0,
> &result_len,
> - -1 TSRMLS_CC);
> + -1,
> + NULL TSRMLS_CC);
> efree(result);
> FREE_ZVAL(replace);
> return result2;
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
- Andrei