Skip to content

Commit a13a1be

Browse files
committed
Use ZEND_HASH_FILL_* API for explode()
1 parent e86bea8 commit a13a1be

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

ext/standard/string.c

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,17 +1032,22 @@ PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return
10321032
ZVAL_STR_COPY(&tmp, str);
10331033
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
10341034
} else {
1035-
do {
1036-
ZVAL_STRINGL_FAST(&tmp, p1, p2 - p1);
1037-
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
1038-
p1 = p2 + ZSTR_LEN(delim);
1039-
p2 = php_memnstr(p1, ZSTR_VAL(delim), ZSTR_LEN(delim), endp);
1040-
} while (p2 != NULL && --limit > 1);
1041-
1042-
if (p1 <= endp) {
1043-
ZVAL_STRINGL(&tmp, p1, endp - p1);
1044-
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
1045-
}
1035+
zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
1036+
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
1037+
do {
1038+
ZEND_HASH_FILL_GROW();
1039+
ZEND_HASH_FILL_SET_STR(zend_string_init_fast(p1, p2 - p1));
1040+
ZEND_HASH_FILL_NEXT();
1041+
p1 = p2 + ZSTR_LEN(delim);
1042+
p2 = php_memnstr(p1, ZSTR_VAL(delim), ZSTR_LEN(delim), endp);
1043+
} while (p2 != NULL && --limit > 1);
1044+
1045+
if (p1 <= endp) {
1046+
ZEND_HASH_FILL_GROW();
1047+
ZEND_HASH_FILL_SET_STR(zend_string_init_fast(p1, endp - p1));
1048+
ZEND_HASH_FILL_NEXT();
1049+
}
1050+
} ZEND_HASH_FILL_END();
10461051
}
10471052
}
10481053
/* }}} */

0 commit comments

Comments
 (0)