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