pollita         Thu Jul 24 21:03:39 2003 EDT

  Modified files:              
    /php-src/ext/standard       php_string.h string.c 
  Log:
  Fix Bug#24784 single character search keys not respecting case sensitivity/replace 
count parameters.
  
Index: php-src/ext/standard/php_string.h
diff -u php-src/ext/standard/php_string.h:1.78 php-src/ext/standard/php_string.h:1.79
--- php-src/ext/standard/php_string.h:1.78      Tue Jun 10 16:03:38 2003
+++ php-src/ext/standard/php_string.h   Thu Jul 24 21:03:39 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_string.h,v 1.78 2003/06/10 20:03:38 imajes Exp $ */
+/* $Id: php_string.h,v 1.79 2003/07/25 01:03:39 pollita Exp $ */
 
 /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
 
@@ -130,6 +130,7 @@
                int needle_len, char *str, int str_len, int *_new_length);
 PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, 
int mode TSRMLS_DC);
 PHPAPI size_t php_strip_tags(char *rbuf, int len, int *state, char *allow, int 
allow_len);
+PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, 
pval *result, int case_sensitivity, int *replace_count);
 PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, pval 
*result);
 PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value);
 PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit);
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.393 php-src/ext/standard/string.c:1.394
--- php-src/ext/standard/string.c:1.393 Sat Jul 12 05:33:31 2003
+++ php-src/ext/standard/string.c       Thu Jul 24 21:03:39 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.393 2003/07/12 09:33:31 moriyoshi Exp $ */
+/* $Id: string.c,v 1.394 2003/07/25 01:03:39 pollita Exp $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
@@ -2854,9 +2854,9 @@
 #define _isblank(c)   (((((unsigned char) c) == ' '  || ((unsigned char) c) == '\t')) 
? 1 : 0)
 #define _isnewline(c) (((((unsigned char) c) == '\n' || ((unsigned char) c) == '\r')) 
? 1 : 0)
 
-/* {{{ php_char_to_str
+/* {{{ php_char_to_str_ex
  */
-PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, zval 
*result)
+PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, 
zval *result, int case_sensitivity, int *replace_count)
 {
        int char_count = 0;
        int replaced = 0;
@@ -2878,8 +2878,11 @@
        Z_TYPE_P(result) = IS_STRING;
        
        for (source = str; source < source_end; source++) {
-               if (*source == from) {
+               if ((case_sensitivity && *source == from) || (!case_sensitivity && 
tolower(*source) == tolower(from))) {
                        replaced = 1;
+                       if (replace_count) {
+                               *replace_count += 1;
+                       }
                        for (tmp = to, tmp_end = tmp+to_len; tmp < tmp_end; tmp++) {
                                *target = *tmp;
                                target++;
@@ -2894,6 +2897,14 @@
 }
 /* }}} */
 
+/* {{{ php_char_to_str
+ */
+PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, zval 
*result)
+{
+       return php_char_to_str_ex(str, len, from, to, to_len, result, 1, NULL);
+}
+/* }}} */
+
 /* {{{ php_str_to_str_ex
  */
 PHPAPI char *php_str_to_str_ex(char *haystack, int length, 
@@ -3089,12 +3100,14 @@
                        }
                        
                        if (Z_STRLEN_PP(search_entry) == 1) {
-                               php_char_to_str(Z_STRVAL_P(result),
+                               php_char_to_str_ex(Z_STRVAL_P(result),
                                                                Z_STRLEN_P(result),
                                                                
Z_STRVAL_PP(search_entry)[0],
                                                                replace_value,
                                                                replace_len,
-                                                               &temp_result);
+                                                               &temp_result,
+                                                               case_sensitivity,
+                                                               replace_count);
                        } else if (Z_STRLEN_PP(search_entry) > 1) {
                                Z_STRVAL(temp_result) = 
php_str_to_str_ex(Z_STRVAL_P(result), Z_STRLEN_P(result),
                                                                                       
                            Z_STRVAL_PP(search_entry), Z_STRLEN_PP(search_entry),
@@ -3113,12 +3126,14 @@
                }
        } else {
                if (Z_STRLEN_P(search) == 1) {
-                       php_char_to_str(Z_STRVAL_PP(subject),
+                       php_char_to_str_ex(Z_STRVAL_PP(subject),
                                                        Z_STRLEN_PP(subject),
                                                        Z_STRVAL_P(search)[0],
                                                        Z_STRVAL_P(replace),
                                                        Z_STRLEN_P(replace),
-                                                       result);
+                                                       result,
+                                                       case_sensitivity,
+                                                       replace_count);
                } else if (Z_STRLEN_P(search) > 1) {
                        Z_STRVAL_P(result) = php_str_to_str_ex(Z_STRVAL_PP(subject), 
Z_STRLEN_PP(subject),
                                                                                       
                 Z_STRVAL_P(search), Z_STRLEN_P(search),



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to