]> granicus.if.org Git - php/commitdiff
Use zend_string in case we will optimize them
authorXinchen Hui <laruence@php.net>
Tue, 20 Jan 2015 02:59:28 +0000 (10:59 +0800)
committerXinchen Hui <laruence@php.net>
Tue, 20 Jan 2015 02:59:28 +0000 (10:59 +0800)
ext/standard/php_string.h
ext/standard/string.c
ext/standard/var.c

index 1cca1438cbc76de90776ed30c98f3df4a1c1fc1b..a02658dc63567a17ea6cfb2a546e3251482acc52 100644 (file)
@@ -124,9 +124,9 @@ PHPAPI zend_string *php_string_toupper(zend_string *s);
 PHPAPI zend_string *php_string_tolower(zend_string *s);
 PHPAPI char *php_strtr(char *str, size_t len, char *str_from, char *str_to, size_t trlen);
 PHPAPI zend_string *php_addslashes(zend_string *str, int should_free);
-PHPAPI zend_string *php_addcslashes(const char *str, size_t length, int freeit, char *what, size_t wlength);
-PHPAPI void php_stripslashes(char *str, size_t *len);
-PHPAPI void php_stripcslashes(char *str, size_t *len);
+PHPAPI zend_string *php_addcslashes(zend_string *str, int freeit, char *what, size_t what_len);
+PHPAPI void php_stripslashes(zend_string *str);
+PHPAPI void php_stripcslashes(zend_string *str);
 PHPAPI zend_string *php_basename(const char *s, size_t len, char *suffix, size_t sufflen);
 PHPAPI size_t php_dirname(char *str, size_t len);
 PHPAPI char *php_stristr(char *s, char *t, size_t s_len, size_t t_len);
index 78c7a25ddced76e3dab1486d55f7949b17862106..2c60e207fb7ee32e937628d0afa9808122f7a039 100644 (file)
@@ -3633,25 +3633,19 @@ PHP_FUNCTION(similar_text)
 /* {{{ php_stripslashes
  *
  * be careful, this edits the string in-place */
-PHPAPI void php_stripslashes(char *str, size_t *len)
+PHPAPI void php_stripslashes(zend_string *str)
 {
        char *s, *t;
        size_t l;
 
-       if (len != NULL) {
-               l = *len;
-       } else {
-               l = strlen(str);
-       }
-       s = str;
-       t = str;
+       s = (char *)str->val;
+       t = (char *)str->val;
+       l = str->len;
 
        while (l > 0) {
                if (*t == '\\') {
                        t++;                            /* skip the slash */
-                       if (len != NULL) {
-                               (*len)--;
-                       }
+                       str->len--;
                        l--;
                        if (l > 0) {
                                if (*t == '0') {
@@ -3691,7 +3685,7 @@ PHP_FUNCTION(addcslashes)
                RETURN_STRINGL(str->val, str->len);
        }
 
-       RETURN_STR(php_addcslashes(str->val, str->len, 0, what->val, what->len));
+       RETURN_STR(php_addcslashes(str, 0, what->val, what->len));
 }
 /* }}} */
 
@@ -3730,7 +3724,7 @@ PHP_FUNCTION(stripcslashes)
        }
 
        ZVAL_STRINGL(return_value, str->val, str->len);
-       php_stripcslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value));
+       php_stripcslashes(Z_STR_P(return_value));
 }
 /* }}} */
 
@@ -3745,7 +3739,7 @@ PHP_FUNCTION(stripslashes)
        }
 
        ZVAL_STRINGL(return_value, str->val, str->len);
-       php_stripslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value));
+       php_stripslashes(Z_STR_P(return_value));
 }
 /* }}} */
 
@@ -3769,14 +3763,14 @@ char *php_strerror(int errnum)
 
 /* {{{ php_stripcslashes
  */
-PHPAPI void php_stripcslashes(char *str, size_t *len)
+PHPAPI void php_stripcslashes(zend_string *str)
 {
        char *source, *target, *end;
-       size_t  nlen = *len, i;
+       size_t  nlen = str->len, i;
        char numtmp[4];
 
-       for (source=str, end=str+nlen, target=str; source < end; source++) {
-               if (*source == '\\' && source+1 < end) {
+       for (source = (char*)str->val, end = source + str->len, target = str->val; source < end; source++) {
+               if (*source == '\\' && source + 1 < end) {
                        source++;
                        switch (*source) {
                                case 'n':  *target++='\n'; nlen--; break;
@@ -3826,28 +3820,24 @@ PHPAPI void php_stripcslashes(char *str, size_t *len)
                *target='\0';
        }
 
-       *len = nlen;
+       str->len = nlen;
 }
 /* }}} */
 
 /* {{{ php_addcslashes
  */
-PHPAPI zend_string *php_addcslashes(const char *str, size_t length, int should_free, char *what, size_t wlength)
+PHPAPI zend_string *php_addcslashes(zend_string *str, int should_free, char *what, size_t wlength)
 {
        char flags[256];
        char *source, *target;
        char *end;
        char c;
        size_t  newlen;
-       zend_string *new_str = zend_string_alloc(4 * (length? length : (length = strlen(str))), 0);
-
-       if (!wlength) {
-               wlength = strlen(what);
-       }
+       zend_string *new_str = zend_string_alloc(4 * str->len, 0);
 
        php_charmask((unsigned char *)what, wlength, flags);
 
-       for (source = (char*)str, end = source + length, target = new_str->val; source < end; source++) {
+       for (source = (char*)str->val, end = source + str->len, target = new_str->val; source < end; source++) {
                c = *source;
                if (flags[(unsigned char)c]) {
                        if ((unsigned char) c < 32 || (unsigned char) c > 126) {
@@ -3870,11 +3860,11 @@ PHPAPI zend_string *php_addcslashes(const char *str, size_t length, int should_f
        }
        *target = 0;
        newlen = target - new_str->val;
-       if (newlen < length * 4) {
+       if (newlen < str->len * 4) {
                new_str = zend_string_realloc(new_str, newlen, 0);
        }
        if (should_free) {
-               efree((char*)str);
+               zend_string_release(str);
        }
        return new_str;
 }
index 80572f82a585a0e6e8141ff4ea67dfcba4feebcf..5e986d451d3e0abe4e88907318b6271e336c9b37 100644 (file)
@@ -404,7 +404,7 @@ static void php_array_element_export(zval *zv, zend_ulong index, zend_string *ke
 
        } else { /* string key */
                zend_string *tmp_str;
-               zend_string *ckey = php_addcslashes(key->val, key->len, 0, "'\\", 2);
+               zend_string *ckey = php_addcslashes(key, 0, "'\\", 2);
                tmp_str = php_str_to_str(ckey->val, ckey->len, "\0", 1, "' . \"\\0\" . '", 12);
 
                buffer_append_spaces(buf, level + 1);
@@ -432,7 +432,7 @@ static void php_object_element_export(zval *zv, zend_ulong index, zend_string *k
                zend_string *pname_esc;
 
                zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len);
-               pname_esc = php_addcslashes(prop_name, prop_name_len, 0, "'\\", 2);
+               pname_esc = php_addcslashes(zend_string_init(prop_name, prop_name_len, 0), 1, "'\\", 2);
 
                smart_str_appendc(buf, '\'');
                smart_str_append(buf, pname_esc);
@@ -478,7 +478,7 @@ again:
                        efree(tmp_str);
                        break;
                case IS_STRING:
-                       ztmp = php_addcslashes(Z_STRVAL_P(struc), Z_STRLEN_P(struc), 0, "'\\", 2);
+                       ztmp = php_addcslashes(Z_STR_P(struc), 0, "'\\", 2);
                        ztmp2 = php_str_to_str(ztmp->val, ztmp->len, "\0", 1, "' . \"\\0\" . '", 12);
 
                        smart_str_appendc(buf, '\'');