summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-04-22 11:59:53 +0800
committerXinchen Hui <laruence@gmail.com>2014-04-22 11:59:53 +0800
commit89d89b95861c4366f93e705546c0ca8c4443a425 (patch)
treed59aaef97b53a61bc7c10de368dad7adcc34fef7 /Zend/zend_API.c
parente48b9ad197b4ec6ac72e75538453cc350d0a41f4 (diff)
parentfa588a5c82c0264dc10862495c993a914a421667 (diff)
downloadphp-git-89d89b95861c4366f93e705546c0ca8c4443a425.tar.gz
Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 7d79d99bee..6cf6cb2157 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -2836,6 +2836,7 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
zend_class_entry *last_scope;
HashTable *ftable;
int call_via_handler = 0;
+ ALLOCA_FLAG(use_heap)
if (error) {
*error = NULL;
@@ -2845,22 +2846,27 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
fcc->function_handler = NULL;
if (!ce_org) {
+ char *lmname;
+ int lmname_len;
+
/* Skip leading \ */
if (Z_STRVAL_P(callable)[0] == '\\') {
- lmname = STR_ALLOC(Z_STRLEN_P(callable) - 1, 0);
- zend_str_tolower_copy(lmname->val, Z_STRVAL_P(callable) + 1, Z_STRLEN_P(callable) - 1);
+ lmname = do_alloca(Z_STRLEN_P(callable) - 1, use_heap);
+ lmname_len = Z_STRLEN_P(callable) - 1;
+ zend_str_tolower_copy(lmname, Z_STRVAL_P(callable) + 1, lmname_len);
} else {
- lmname = STR_ALLOC(Z_STRLEN_P(callable), 0);
- zend_str_tolower_copy(lmname->val, Z_STRVAL_P(callable), Z_STRLEN_P(callable));
+ lmname = do_alloca(Z_STRLEN_P(callable), use_heap);
+ lmname_len = Z_STRLEN_P(callable);
+ zend_str_tolower_copy(lmname, Z_STRVAL_P(callable), lmname_len);
}
/* Check if function with given name exists.
* This may be a compound name that includes namespace name */
- fcc->function_handler = zend_hash_find_ptr(EG(function_table), lmname);
+ fcc->function_handler = zend_hash_str_find_ptr(EG(function_table), lmname, lmname_len);
if (fcc->function_handler != NULL) {
- STR_FREE(lmname);
+ free_alloca(lmname, use_heap);
return 1;
}
- STR_FREE(lmname);
+ free_alloca(lmname, use_heap);
}
/* Split name into class/namespace and method/function names */
@@ -3283,12 +3289,7 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint
default:
if (callable_name) {
- zval expr_copy;
- int use_copy;
-
- zend_make_printable_zval(callable, &expr_copy, &use_copy);
- *callable_name = STR_COPY(Z_STR(expr_copy));
- zval_dtor(&expr_copy);
+ *callable_name = zval_get_string(callable);
}
if (error) zend_spprintf(error, 0, "no array or string given");
return 0;