moriyoshi Tue Nov 26 17:14:12 2002 EDT
Modified files: (Branch: PHP_4_3)
/php4/ext/standard array.c
Log:
MFH: improved the error reporting portion of array_walk()
Index: php4/ext/standard/array.c
diff -u php4/ext/standard/array.c:1.199.2.3 php4/ext/standard/array.c:1.199.2.4
--- php4/ext/standard/array.c:1.199.2.3 Tue Nov 26 16:54:33 2002
+++ php4/ext/standard/array.c Tue Nov 26 17:14:11 2002
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.199.2.3 2002/11/26 21:54:33 moriyoshi Exp $ */
+/* $Id: array.c,v 1.199.2.4 2002/11/26 22:14:11 moriyoshi Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -980,38 +980,16 @@
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;
- }
- }
-
- 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");
- }
- break;
+ char *func_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;
}
zend_hash_move_forward_ex(target_hash, &pos);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php