memset(Z_STRVAL_P(str) + old_len, ' ', offset - old_len);
Z_STRVAL_P(str)[offset+1] = 0;
} else if (IS_INTERNED(Z_STR_P(str))) {
- Z_STR_P(str) = STR_DUP(Z_STR_P(str), 0);
+ Z_STR_P(str) = STR_INIT(Z_STRVAL_P(str), Z_STRLEN_P(str), 0);
}
if (Z_TYPE_P(value) != IS_STRING) {
filename = STR_EMPTY_ALLOC();
}
- dirname = STR_DUP(filename, 0);
+ dirname = STR_INIT(filename->val, filename->len, 0);
zend_dirname(dirname->val, dirname->len);
if (strcmp(dirname->val, ".") == 0) {
filename = STR_EMPTY_ALLOC();
}
- dirname = STR_DUP(filename, 0);
+ dirname = STR_INIT(filename->val, filename->len, 0);
zend_dirname(dirname->val, dirname->len);
if (strcmp(dirname->val, ".") == 0) {
zval op1_copy = *op1;
Z_TYPE_P(result) = IS_STRING;
- Z_STR_P(result) = STR_DUP(Z_STR(op1_copy), 0);
+ Z_STR_P(result) = STR_ALLOC(Z_STRLEN(op1_copy), 0);
for (i = 0; i < Z_STRLEN(op1_copy); i++) {
Z_STRVAL_P(result)[i] = ~Z_STRVAL(op1_copy)[i];
}
+ Z_STRVAL_P(result)[i] = 0;
return SUCCESS;
}
default:
shorter = op1;
}
- str = STR_DUP(Z_STR_P(longer), 0);
+ str = STR_ALLOC(Z_STRLEN_P(longer), 0);
for (i = 0; i < Z_STRLEN_P(shorter); i++) {
- str->val[i] |= Z_STRVAL_P(shorter)[i];
+ str->val[i] = Z_STRVAL_P(longer)[i] | Z_STRVAL_P(shorter)[i];
}
+ memcpy(str->val + i, Z_STRVAL_P(longer) + i, Z_STRLEN_P(longer) - i + 1);
if (result==op1) {
STR_RELEASE(Z_STR_P(result));
}
shorter = op1;
}
- str = STR_DUP(Z_STR_P(shorter), 0);
+ str = STR_ALLOC(Z_STRLEN_P(shorter), 0);
for (i = 0; i < Z_STRLEN_P(shorter); i++) {
- str->val[i] &= Z_STRVAL_P(longer)[i];
+ str->val[i] = Z_STRVAL_P(shorter)[i] & Z_STRVAL_P(longer)[i];
}
+ str->val[i] = 0;
if (result==op1) {
STR_RELEASE(Z_STR_P(result));
}
shorter = op1;
}
- str = STR_DUP(Z_STR_P(shorter), 0);
+ str = STR_ALLOC(Z_STRLEN_P(shorter), 0);
for (i = 0; i < Z_STRLEN_P(shorter); i++) {
- str->val[i] ^= Z_STRVAL_P(longer)[i];
+ str->val[i] = Z_STRVAL_P(shorter)[i] ^ Z_STRVAL_P(longer)[i];
}
+ str->val[i] = 0;
if (result==op1) {
STR_RELEASE(Z_STR_P(result));
}
}
if (IS_INTERNED(Z_STR_P(str))) {
- Z_STR_P(str) = STR_DUP(Z_STR_P(str), 0);
+ Z_STR_P(str) = STR_INIT(Z_STRVAL_P(str), Z_STRLEN_P(str), 0);
} else if (Z_REFCOUNT_P(str) > 1) {
Z_DELREF_P(str);
- Z_STR_P(str) = STR_DUP(Z_STR_P(str), 0);
+ Z_STR_P(str) = STR_INIT(Z_STRVAL_P(str), Z_STRLEN_P(str), 0);
} else {
STR_FORGET_HASH_VAL(Z_STR_P(str));
}
static zend_always_inline zend_string *zend_str_dup(zend_string *s, int persistent)
{
-//??? if (IS_INTERNED(s)) {
-//??? return s;
-//??? } else {
+ if (IS_INTERNED(s)) {
+ return s;
+ } else {
return STR_INIT(s->val, s->len, persistent);
-//??? }
+ }
}
static zend_always_inline zend_string *zend_str_realloc(zend_string *s, int len, int persistent)
case IS_CONSTANT:
case IS_STRING:
CHECK_ZVAL_STRING_REL(zvalue);
- if (!IS_INTERNED(Z_STR_P(zvalue))) {
- Z_STR_P(zvalue) = STR_DUP(Z_STR_P(zvalue), 0);
- }
+ Z_STR_P(zvalue) = STR_DUP(Z_STR_P(zvalue), 0);
break;
case IS_ARRAY:
case IS_CONSTANT_ARRAY: {
zend_string *prop_name;
ulong index;
- if (zend_hash_get_current_key_ex(properties, &prop_name, &index, 1, &pos) == HASH_KEY_IS_STRING) {
+ if (zend_hash_get_current_key_ex(properties, &prop_name, &index, 0, &pos) == HASH_KEY_IS_STRING) {
if (prop_name->len && prop_name->val[0]) { /* skip all private and protected properties */
if (!zend_hash_exists(&ce->properties_info, prop_name)) {
count++;
_property_string(&dyn, NULL, prop_name->val, sub_indent.buf->val TSRMLS_CC);
}
}
- efree(prop_name);
}
zend_hash_move_forward_ex(properties, &pos);
}
zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry);
break;
case HASH_KEY_IS_STRING:
- new_key = STR_DUP(string_key, 0);
+ new_key = STR_INIT(string_key->val, string_key->len, 0);
if (change_to_upper) {
php_strtoupper(new_key->val, new_key->len);
} else {
return;
}
- out_str = STR_DUP(in_str, 0);
+ out_str = STR_INIT(in_str->val, in_str->len, 0);
out_str->len = php_url_decode(out_str->val, out_str->len);
RETURN_STR(out_str);
return;
}
- out_str = STR_DUP(in_str, 0);
+ out_str = STR_INIT(in_str->val, in_str->len, 0);
out_str->len = php_raw_url_decode(out_str->val, out_str->len);
RETURN_STR(out_str);