From: Xinchen Hui Date: Tue, 20 Jan 2015 02:59:28 +0000 (+0800) Subject: Use zend_string in case we will optimize them X-Git-Tag: PRE_PHP7_REMOVALS~25^2~80 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c369a034074bf8eed9b48a233a1aed145673a94a;p=php Use zend_string in case we will optimize them --- diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index 1cca1438cb..a02658dc63 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -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); diff --git a/ext/standard/string.c b/ext/standard/string.c index 78c7a25ddc..2c60e207fb 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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; } diff --git a/ext/standard/var.c b/ext/standard/var.c index 80572f82a5..5e986d451d 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -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, '\'');