diff options
author | Moriyoshi Koizumi <moriyoshi@php.net> | 2002-11-26 22:12:40 +0000 |
---|---|---|
committer | Moriyoshi Koizumi <moriyoshi@php.net> | 2002-11-26 22:12:40 +0000 |
commit | 98dace883e5c3a1643b96a9a1de722b3dc4e2eee (patch) | |
tree | 4aefff7d2a9426ac5c0a884bf33320032df61f5b /ext/standard/array.c | |
parent | 3fd513f32a26ff6bb3c2c4de0c3393aa4070eed9 (diff) | |
download | php-git-98dace883e5c3a1643b96a9a1de722b3dc4e2eee.tar.gz |
Improved the error reporting portion of array_walk() as suggested by Markus
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r-- | ext/standard/array.c | 36 |
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; } |