summaryrefslogtreecommitdiff
path: root/ext/spl/php_spl.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl/php_spl.c')
-rw-r--r--ext/spl/php_spl.c23
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)