From e4869828a7905af350afe1870c64651578497a6c Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sat, 12 Jul 2008 14:58:41 +0000 Subject: - MFH Allow multiple exceptions in spl's autoload --- ext/spl/php_spl.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'ext/spl/php_spl.c') diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 40612c126c..a8404314c1 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -379,14 +379,22 @@ PHP_FUNCTION(spl_autoload_call) if (SPL_G(autoload_functions)) { int l_autoload_running = SPL_G(autoload_running); + zval *exception = NULL; SPL_G(autoload_running) = 1; class_name_len = Z_STRLEN_P(class_name); lc_name = zend_str_tolower_dup(Z_STRVAL_P(class_name), class_name_len); zend_hash_internal_pointer_reset_ex(SPL_G(autoload_functions), &function_pos); - while(zend_hash_has_more_elements_ex(SPL_G(autoload_functions), &function_pos) == SUCCESS && !EG(exception)) { + while(zend_hash_has_more_elements_ex(SPL_G(autoload_functions), &function_pos) == SUCCESS) { zend_hash_get_current_key_ex(SPL_G(autoload_functions), &func_name, &func_name_len, &dummy, 0, &function_pos); zend_hash_get_current_data_ex(SPL_G(autoload_functions), (void **) &alfi, &function_pos); zend_call_method(alfi->obj ? &alfi->obj : NULL, alfi->ce, &alfi->func_ptr, func_name, func_name_len, &retval, 1, class_name, NULL TSRMLS_CC); + if (EG(exception)) { + if (exception) { + zend_update_property(zend_exception_get_default(TSRMLS_C), EG(exception), "previous", sizeof("previous")-1, exception TSRMLS_CC); + } + exception = EG(exception); + EG(exception) = NULL; + } if (retval) { zval_ptr_dtor(&retval); } @@ -395,6 +403,7 @@ PHP_FUNCTION(spl_autoload_call) } zend_hash_move_forward_ex(SPL_G(autoload_functions), &function_pos); } + EG(exception) = exception; efree(lc_name); SPL_G(autoload_running) = l_autoload_running; } else { -- cgit v1.2.1