diff options
Diffstat (limited to 'ext/spl/php_spl.c')
-rw-r--r-- | ext/spl/php_spl.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 1097a72e98..9fbf772ffc 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -65,8 +65,7 @@ static zend_class_entry * spl_find_ce_by_name(zend_string *name, zend_bool autol zend_class_entry *ce; if (!autoload) { - zend_string *lc_name = zend_string_alloc(ZSTR_LEN(name), 0); - zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(name), ZSTR_LEN(name)); + zend_string *lc_name = zend_string_tolower(name); ce = zend_hash_find_ptr(EG(class_table), lc_name); zend_string_free(lc_name); @@ -321,8 +320,7 @@ PHP_FUNCTION(spl_autoload) pos_len = (int)ZSTR_LEN(file_exts); } - lc_name = zend_string_alloc(ZSTR_LEN(class_name), 0); - zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(class_name), ZSTR_LEN(class_name)); + lc_name = zend_string_tolower(class_name); while (pos && *pos && !EG(exception)) { pos1 = strchr(pos, ','); if (pos1) { @@ -418,7 +416,6 @@ PHP_FUNCTION(spl_autoload_call) fci.no_separation = 1; ZVAL_UNDEF(&fci.function_name); /* Unused */ - fcic.initialized = 1; zend_hash_internal_pointer_reset_ex(SPL_G(autoload_functions), &pos); while (zend_hash_get_current_key_ex(SPL_G(autoload_functions), &func_name, &num_idx, &pos) == HASH_KEY_IS_STRING) { @@ -449,16 +446,18 @@ PHP_FUNCTION(spl_autoload_call) } zend_call_function(&fci, &fcic); - - zend_exception_save(); zval_ptr_dtor(&retval); + + if (EG(exception)) { + break; + } + if (pos + 1 == SPL_G(autoload_functions)->nNumUsed || zend_hash_exists(EG(class_table), lc_name)) { break; } zend_hash_move_forward_ex(SPL_G(autoload_functions), &pos); } - zend_exception_restore(); zend_string_release(lc_name); SPL_G(autoload_running) = l_autoload_running; } else { @@ -569,8 +568,7 @@ PHP_FUNCTION(spl_autoload_register) lc_name = zend_string_alloc(ZSTR_LEN(func_name) - 1, 0); zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name) + 1, ZSTR_LEN(func_name) - 1); } else { - lc_name = zend_string_alloc(ZSTR_LEN(func_name), 0); - zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name)); + lc_name = zend_string_tolower(func_name); } } zend_string_release(func_name); @@ -694,8 +692,7 @@ PHP_FUNCTION(spl_autoload_unregister) lc_name = zend_string_alloc(ZSTR_LEN(func_name) - 1, 0); zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name) + 1, ZSTR_LEN(func_name) - 1); } else { - lc_name = zend_string_alloc(ZSTR_LEN(func_name), 0); - zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name)); + lc_name = zend_string_tolower(func_name); } } zend_string_release(func_name); @@ -949,7 +946,7 @@ ZEND_END_ARG_INFO() /* {{{ spl_functions */ -const zend_function_entry spl_functions[] = { +static const zend_function_entry spl_functions[] = { PHP_FE(spl_classes, arginfo_spl_classes) PHP_FE(spl_autoload, arginfo_spl_autoload) PHP_FE(spl_autoload_extensions, arginfo_spl_autoload_extensions) |