diff options
Diffstat (limited to 'ext/standard/string.c')
-rw-r--r-- | ext/standard/string.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index 686fa19536..ee66e8a2af 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1082,18 +1082,22 @@ PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return char *p1 = str->val; char *endp = str->val + str->len; char *p2 = (char *) php_memnstr(str->val, delim->val, delim->len, endp); + zval tmp; if (p2 == NULL) { - add_next_index_str(return_value, zend_string_copy(str)); + ZVAL_STR_COPY(&tmp, str); + zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp); } else { do { - add_next_index_stringl(return_value, p1, p2 - p1); + ZVAL_STRINGL(&tmp, p1, p2 - p1); + zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp); p1 = p2 + delim->len; p2 = (char *) php_memnstr(p1, delim->val, delim->len, endp); } while (p2 != NULL && --limit > 1); if (p1 <= endp) { - add_next_index_stringl(return_value, p1, endp - p1); + ZVAL_STRINGL(&tmp, p1, endp - p1); + zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp); } } } @@ -1107,6 +1111,7 @@ PHPAPI void php_explode_negative_limit(const zend_string *delim, zend_string *st char *p1 = str->val; char *endp = str->val + str->len; char *p2 = (char *) php_memnstr(str->val, delim->val, delim->len, endp); + zval tmp; if (p2 == NULL) { /* @@ -1131,8 +1136,8 @@ PHPAPI void php_explode_negative_limit(const zend_string *delim, zend_string *st to_return = limit + found; /* limit is at least -1 therefore no need of bounds checking : i will be always less than found */ for (i = 0; i < to_return; i++) { /* this checks also for to_return > 0 */ - add_next_index_stringl(return_value, positions[i], - (positions[i+1] - delim->len) - positions[i]); + ZVAL_STRINGL(&tmp, positions[i], (positions[i+1] - delim->len) - positions[i]); + zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp); } efree(positions); } @@ -1146,6 +1151,7 @@ PHP_FUNCTION(explode) { zend_string *str, *delim; zend_long limit = ZEND_LONG_MAX; /* No limit */ + zval tmp; #ifndef FAST_ZPP if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|l", &delim, &str, &limit) == FAILURE) { @@ -1169,7 +1175,8 @@ PHP_FUNCTION(explode) if (str->len == 0) { if (limit >= 0) { - add_next_index_str(return_value, STR_EMPTY_ALLOC()); + ZVAL_EMPTY_STRING(&tmp); + zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp); } return; } @@ -1179,7 +1186,8 @@ PHP_FUNCTION(explode) } else if (limit < 0) { php_explode_negative_limit(delim, str, return_value, limit); } else { - add_index_stringl(return_value, 0, str->val, str->len); + ZVAL_STR_COPY(&tmp, str); + zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp); } } /* }}} */ |