cvs: php-src /ext/spl php_spl.c /ext/spl/tests spl_autoload_008.phpt

From: Date: Thu, 23 Mar 2006 12:55:58 +0000
Subject: cvs: php-src /ext/spl php_spl.c /ext/spl/tests spl_autoload_008.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-37452@lists.php.net to get a copy of this message
helly Thu Mar 23 12:55:58 2006 UTC Modified files: /php-src/ext/spl php_spl.c /php-src/ext/spl/tests spl_autoload_008.phpt Log: - Make spl_autoload_unregister() accept any callable like spl_autoload_register() http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/php_spl.c?r1=1.87&r2=1.88&diff_format=u Index: php-src/ext/spl/php_spl.c diff -u php-src/ext/spl/php_spl.c:1.87 php-src/ext/spl/php_spl.c:1.88 --- php-src/ext/spl/php_spl.c:1.87 Tue Feb 21 20:12:42 2006 +++ php-src/ext/spl/php_spl.c Thu Mar 23 12:55:58 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_spl.c,v 1.87 2006/02/21 20:12:42 dmitry Exp $ */ +/* $Id: php_spl.c,v 1.88 2006/03/23 12:55:58 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -378,7 +378,7 @@ } } /* }}} */ -/* {{{ proto void spl_autoload_register([string autoload_function = "spl_autoload" [, throw = true]]) +/* {{{ proto void spl_autoload_register([mixed autoload_function = "spl_autoload" [, throw = true]]) Register given function as __autoload() implementation */ PHP_FUNCTION(spl_autoload_register) { @@ -482,24 +482,30 @@ } } /* }}} */ -/* {{{ proto bool spl_autoload_unregister(string autoload_function) +/* {{{ proto bool spl_autoload_unregister(mixed autoload_function) Unregister given function as __autoload() implementation */ PHP_FUNCTION(spl_autoload_unregister) { - zstr func_name, lc_name; - int func_name_len, success = FAILURE; + zval zfunc_name; + zval *zcallable; + zstr lc_name; + int success = FAILURE; zend_function *spl_func_ptr; - zend_uchar func_name_type; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t", &func_name, &func_name_len, &func_name_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zcallable) == FAILURE) { + return; + } + + if (!zend_is_callable_ex(zcallable, IS_CALLABLE_CHECK_SYNTAX_ONLY, &zfunc_name, NULL, NULL, NULL TSRMLS_CC)) { + zval_dtor(&zfunc_name); return; } - lc_name = zend_u_str_tolower_dup(func_name_type, func_name, func_name_len); + lc_name = zend_u_str_tolower_dup(Z_TYPE(zfunc_name), Z_UNIVAL(zfunc_name), Z_UNILEN(zfunc_name)); if (SPL_G(autoload_functions)) { - if ((func_name_len == sizeof("spl_autoload_call")-1) && - (ZEND_U_EQUAL(func_name_type, lc_name, func_name_len, "spl_autoload_call", sizeof("spl_autoload_call")-1))) { + if ((Z_UNILEN(zfunc_name) == sizeof("spl_autoload_call")-1) && + (ZEND_U_EQUAL(Z_TYPE(zfunc_name), lc_name, Z_UNILEN(zfunc_name), "spl_autoload_call", sizeof("spl_autoload_call")-1))) { /* remove all */ zend_hash_destroy(SPL_G(autoload_functions)); FREE_HASHTABLE(SPL_G(autoload_functions)); @@ -508,10 +514,10 @@ success = SUCCESS; } else { /* remove specific */ - success = zend_u_hash_del(SPL_G(autoload_functions), func_name_type, lc_name, func_name_len+1); + success = zend_u_hash_del(SPL_G(autoload_functions), Z_TYPE(zfunc_name), lc_name, Z_UNILEN(zfunc_name)+1); } - } else if ((func_name_len == sizeof("spl_autoload")-1) && - (ZEND_U_EQUAL(func_name_type, lc_name, func_name_len, "spl_autoload", sizeof("spl_autoload")-1))) { + } else if ((Z_UNILEN(zfunc_name) == sizeof("spl_autoload")-1) && + (ZEND_U_EQUAL(Z_TYPE(zfunc_name), lc_name, Z_UNILEN(zfunc_name), "spl_autoload", sizeof("spl_autoload")-1))) { /* register single spl_autoload() */ zend_hash_find(EG(function_table), "spl_autoload", sizeof("spl_autoload"), (void **) &spl_func_ptr); @@ -522,6 +528,7 @@ } efree(lc_name.v); + zval_dtor(&zfunc_name); RETURN_BOOL(success == SUCCESS); } /* }}} */ http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/tests/spl_autoload_008.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/spl/tests/spl_autoload_008.phpt diff -u php-src/ext/spl/tests/spl_autoload_008.phpt:1.1 php-src/ext/spl/tests/spl_autoload_008.phpt:1.2 --- php-src/ext/spl/tests/spl_autoload_008.phpt:1.1 Thu Mar 23 12:20:35 2006 +++ php-src/ext/spl/tests/spl_autoload_008.phpt Thu Mar 23 12:55:58 2006 @@ -60,12 +60,6 @@ echo get_class($e) . ": " . $e->getMessage() . "\n"; } - if (is_array($func)) { - if (is_object($func[0])) { - $func[0] = get_class($func[0]); - } - $func = join('::', $func); - } spl_autoload_unregister($func); var_dump(count(spl_autoload_functions())); }

« previous php.cvs (#37452) next »