PHPAPI char *php_strtoupper(char *s, size_t len);
PHPAPI char *php_strtolower(char *s, size_t len);
PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen);
-PHPAPI char *php_addslashes(char *str, int length, int *new_length, int freeit TSRMLS_DC);
-PHPAPI char *php_addcslashes(const char *str, int length, int *new_length, int freeit, char *what, int wlength TSRMLS_DC);
+PHPAPI char *php_addslashes(char *str, int length, int *new_length, int should_free TSRMLS_DC);
+PHPAPI zend_string *php_addcslashes(const char *str, int length, int freeit, char *what, int wlength TSRMLS_DC);
PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC);
PHPAPI void php_stripcslashes(char *str, int *len);
PHPAPI void php_basename(const char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len TSRMLS_DC);
RETURN_STRINGL(str, str_len);
}
-//??? Z_STRVAL_P(return_value) = php_addcslashes(str, str_len, &Z_STRLEN_P(return_value), 0, what, what_len TSRMLS_CC);
-//??? RETURN_STRINGL(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), 0);
+ RETURN_STR(php_addcslashes(str, str_len, 0, what, what_len TSRMLS_CC));
}
/* }}} */
/* {{{ php_addcslashes
*/
-PHPAPI char *php_addcslashes(const char *str, int length, int *new_length, int should_free, char *what, int wlength TSRMLS_DC)
+PHPAPI zend_string *php_addcslashes(const char *str, int length, int should_free, char *what, int wlength TSRMLS_DC)
{
char flags[256];
- char *new_str = safe_emalloc(4, (length?length:(length=strlen(str))), 1);
char *source, *target;
char *end;
char c;
int newlen;
+ zend_string *new_str = STR_ALLOC(4 * (length? length : (length = strlen(str))) + 1, 0);
if (!wlength) {
wlength = strlen(what);
php_charmask((unsigned char *)what, wlength, flags TSRMLS_CC);
- for (source = (char*)str, end = source + length, target = new_str; source < end; source++) {
+ for (source = (char*)str, end = source + length, target = new_str->val; source < end; source++) {
c = *source;
if (flags[(unsigned char)c]) {
if ((unsigned char) c < 32 || (unsigned char) c > 126) {
*target++ = c;
}
*target = 0;
- newlen = target - new_str;
- if (target - new_str < length * 4) {
- new_str = erealloc(new_str, newlen + 1);
- }
- if (new_length) {
- *new_length = newlen;
+ newlen = target - new_str->val;
+ if (newlen < length * 4) {
+ new_str = STR_REALLOC(new_str, newlen, 0);
}
if (should_free) {
//??? STR_FREE((char*)str);
smart_str_appendl(buf, " => ", 4);
} else { /* string key */
- char *key, *tmp_str;
- int key_len, tmp_len;
- key = php_addcslashes(hash_key->key->val, hash_key->key->len, &key_len, 0, "'\\", 2 TSRMLS_CC);
- tmp_str = php_str_to_str_ex(key, key_len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len, 0, NULL);
+ char *tmp_str;
+ int tmp_len;
+ zend_string *key = php_addcslashes(hash_key->key->val, hash_key->key->len, 0, "'\\", 2 TSRMLS_CC);
+ tmp_str = php_str_to_str_ex(key->val, key->len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len, 0, NULL);
buffer_append_spaces(buf, level + 1);
smart_str_appendl(buf, tmp_str, tmp_len);
smart_str_appendl(buf, "' => ", 5);
- efree(key);
+ STR_RELEASE(key);
efree(tmp_str);
}
php_var_export_ex(zv, level + 2, buf TSRMLS_CC);
if (hash_key->key != NULL) {
const char *class_name; /* ignored, but must be passed to unmangle */
const char *pname;
- char *pname_esc;
- int pname_esc_len;
+ zend_string *pname_esc;
zend_unmangle_property_name(hash_key->key->val, hash_key->key->len,
&class_name, &pname);
- pname_esc = php_addcslashes(pname, strlen(pname), &pname_esc_len, 0,
- "'\\", 2 TSRMLS_CC);
+ pname_esc = php_addcslashes(pname, strlen(pname), 0, "'\\", 2 TSRMLS_CC);
smart_str_appendc(buf, '\'');
- smart_str_appendl(buf, pname_esc, pname_esc_len);
+ smart_str_appendl(buf, pname_esc->val, pname_esc->len);
smart_str_appendc(buf, '\'');
- efree(pname_esc);
+ STR_RELEASE(pname_esc);
} else {
smart_str_append_long(buf, (long) hash_key->h);
}
PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf TSRMLS_DC) /* {{{ */
{
HashTable *myht;
- char *tmp_str, *tmp_str2;
- int tmp_len, tmp_len2;
+ char *tmp_str;
+ int tmp_len;
zend_string *class_name;
+ zend_string *ztmp;
switch (Z_TYPE_P(struc)) {
case IS_BOOL:
efree(tmp_str);
break;
case IS_STRING:
- tmp_str = php_addcslashes(Z_STRVAL_P(struc), Z_STRLEN_P(struc), &tmp_len, 0, "'\\", 2 TSRMLS_CC);
- tmp_str2 = php_str_to_str_ex(tmp_str, tmp_len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len2, 0, NULL);
+ ztmp = php_addcslashes(Z_STRVAL_P(struc), Z_STRLEN_P(struc), 0, "'\\", 2 TSRMLS_CC);
+ tmp_str = php_str_to_str_ex(ztmp->val, ztmp->len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len, 0, NULL);
smart_str_appendc(buf, '\'');
- smart_str_appendl(buf, tmp_str2, tmp_len2);
+ smart_str_appendl(buf, tmp_str, tmp_len);
smart_str_appendc(buf, '\'');
- efree(tmp_str2);
+ STR_RELEASE(ztmp);
efree(tmp_str);
break;
case IS_ARRAY:
ce = zend_get_class_entry(struc TSRMLS_CC);
if (ce) {
zend_string *prot_name, *priv_name;
- int prop_name_length;
do {
priv_name = zend_mangle_property_name(ce->name->val, ce->name->len, Z_STRVAL_P(name), Z_STRLEN_P(name), ce->type & ZEND_INTERNAL_CLASS);