summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2002-11-26 22:12:40 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2002-11-26 22:12:40 +0000
commit98dace883e5c3a1643b96a9a1de722b3dc4e2eee (patch)
tree4aefff7d2a9426ac5c0a884bf33320032df61f5b
parent3fd513f32a26ff6bb3c2c4de0c3393aa4070eed9 (diff)
downloadphp-git-98dace883e5c3a1643b96a9a1de722b3dc4e2eee.tar.gz
Improved the error reporting portion of array_walk() as suggested by Markus
-rw-r--r--ext/standard/array.c36
1 files changed, 7 insertions, 29 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 0a329cea89..9c17290e3d 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -980,37 +980,15 @@ static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)
zval_ptr_dtor(&retval_ptr);
} else {
- if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist",
- (*BG(array_walk_func_name))->value.str.val);
- } else if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_ARRAY) {
- char *obj_name = NULL;
- zval **obj;
- zval **mt_name;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
- 0, (void **)&obj) == SUCCESS
- && zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
- 1, (void **)&mt_name) == SUCCESS
- && Z_TYPE_PP(mt_name) == IS_STRING) {
- switch (Z_TYPE_PP(obj)) {
- case IS_OBJECT:
- obj_name = Z_OBJ_PP(obj)->ce->name;
- break;
-
- case IS_STRING:
- obj_name = Z_STRVAL_PP(obj);
- break;
- }
- }
+ char *func_name;
- if (obj_name != NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist",
- obj_name, Z_STRVAL_PP(mt_name));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid function name");
- }
+ if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name);
}
+
+ efree(func_name);
break;
}