summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index ab48d54923..b7bf6b4549 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1131,32 +1131,28 @@ static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive
Apply a user function to every member of an array */
PHP_FUNCTION(array_walk)
{
- int argc;
- zval **array,
- **userdata = NULL,
+ zval *array,
+ *userdata = NULL,
+ *tmp,
**old_walk_func_name;
HashTable *target_hash;
- argc = ZEND_NUM_ARGS();
old_walk_func_name = BG(array_walk_func_name);
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) {
- BG(array_walk_func_name) = old_walk_func_name;
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|z", &array, &tmp, &userdata) == FAILURE) {
+ return;
}
- target_hash = HASH_OF(*array);
+ target_hash = HASH_OF(array);
if (!target_hash) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- BG(array_walk_func_name) = old_walk_func_name;
RETURN_FALSE;
}
- if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY &&
- Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) {
+ if (Z_TYPE_P(tmp) != IS_ARRAY && Z_TYPE_P(tmp) != IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong syntax for function name");
- BG(array_walk_func_name) = old_walk_func_name;
RETURN_FALSE;
+ } else {
+ BG(array_walk_func_name) = &tmp;
}
- php_array_walk(target_hash, userdata, 0 TSRMLS_CC);
+ php_array_walk(target_hash, userdata ? &userdata: NULL, 0 TSRMLS_CC);
BG(array_walk_func_name) = old_walk_func_name;
RETURN_TRUE;
}
@@ -1166,32 +1162,28 @@ PHP_FUNCTION(array_walk)
Apply a user function recursively to every member of an array */
PHP_FUNCTION(array_walk_recursive)
{
- int argc;
- zval **array,
- **userdata = NULL,
+ zval *array,
+ *userdata = NULL,
+ *tmp,
**old_walk_func_name;
HashTable *target_hash;
- argc = ZEND_NUM_ARGS();
old_walk_func_name = BG(array_walk_func_name);
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) {
- BG(array_walk_func_name) = old_walk_func_name;
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|z", &array, &tmp, &userdata) == FAILURE) {
+ return;
}
- target_hash = HASH_OF(*array);
+ target_hash = HASH_OF(array);
if (!target_hash) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- BG(array_walk_func_name) = old_walk_func_name;
RETURN_FALSE;
}
- if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY && Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) {
+ if (Z_TYPE_P(tmp) != IS_ARRAY && Z_TYPE_P(tmp) != IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong syntax for function name");
- BG(array_walk_func_name) = old_walk_func_name;
RETURN_FALSE;
+ } else {
+ BG(array_walk_func_name) = &tmp;
}
- php_array_walk(target_hash, userdata, 1 TSRMLS_CC);
+ php_array_walk(target_hash, userdata ? &userdata : NULL, 1 TSRMLS_CC);
BG(array_walk_func_name) = old_walk_func_name;
RETURN_TRUE;
}