From: Dmitry Stogov Date: Fri, 27 Oct 2017 11:44:21 +0000 (+0300) Subject: Extend zend_register_class_alias_ex() with additional argument to allow creating... X-Git-Tag: php-7.3.0alpha1~1160^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e01026b829f51d80d62648db9d81263454b2988;p=php Extend zend_register_class_alias_ex() with additional argument to allow creating persistent or per-request aliases --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index fd1705149b..61b1829f78 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2762,15 +2762,15 @@ ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_entry *or } /* }}} */ -ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce) /* {{{ */ +ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, int persistent) /* {{{ */ { zend_string *lcname; if (name[0] == '\\') { - lcname = zend_string_alloc(name_len-1, 1); + lcname = zend_string_alloc(name_len-1, persistent); zend_str_tolower_copy(ZSTR_VAL(lcname), name+1, name_len-1); } else { - lcname = zend_string_alloc(name_len, 1); + lcname = zend_string_alloc(name_len, persistent); zend_str_tolower_copy(ZSTR_VAL(lcname), name, name_len); } diff --git a/Zend/zend_API.h b/Zend/zend_API.h index df9e136e4a..4e9a274035 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -302,12 +302,12 @@ ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *cla ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_entry *orig_class_entry); ZEND_API void zend_class_implements(zend_class_entry *class_entry, int num_interfaces, ...); -ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce); +ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, int persistent); -#define zend_register_class_alias(name, ce) \ - zend_register_class_alias_ex(name, sizeof(name)-1, ce) -#define zend_register_ns_class_alias(ns, name, ce) \ - zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce) +#define zend_register_class_alias(name, ce, persistent) \ + zend_register_class_alias_ex(name, sizeof(name)-1, ce, persistent) +#define zend_register_ns_class_alias(ns, name, ce, persistent) \ + zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce, persistent) ZEND_API int zend_disable_function(char *function_name, size_t function_name_length); ZEND_API int zend_disable_class(char *class_name, size_t class_name_length); diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 387e9f5e60..0d6cc442b6 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1529,7 +1529,7 @@ ZEND_FUNCTION(class_alias) if (ce) { if (ce->type == ZEND_USER_CLASS) { - if (zend_register_class_alias_ex(alias_name, alias_name_len, ce) == SUCCESS) { + if (zend_register_class_alias_ex(alias_name, alias_name_len, ce, 0) == SUCCESS) { RETURN_TRUE; } else { zend_error(E_WARNING, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), alias_name);