From: Dmitry Stogov Date: Thu, 15 May 2014 06:57:03 +0000 (+0400) Subject: Removed support for old-style resource destructors (only ext/soap used it) X-Git-Tag: POST_PHPNG_MERGE~368^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=281663f75d24d491932109fa5878f9a23031dda8;p=php Removed support for old-style resource destructors (only ext/soap used it) --- diff --git a/Zend/zend_list.c b/Zend/zend_list.c index 7ebe9c13a7..41565408ba 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -68,18 +68,8 @@ static void zend_resource_dtor(zend_resource *res TSRMLS_DC) ld = zend_hash_index_find_ptr(&list_destructors, res->type); if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->list_dtor) { - (ld->list_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->list_dtor_ex) { - ld->list_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (ld->list_dtor_ex) { + ld->list_dtor_ex(res TSRMLS_CC); } } else { zend_error(E_WARNING,"Unknown list entry type (%d)", res->type); @@ -192,18 +182,8 @@ void plist_entry_destructor(zval *zv) ld = zend_hash_index_find_ptr(&list_destructors, res->type); if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->plist_dtor) { - (ld->plist_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->plist_dtor_ex) { - ld->plist_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (ld->plist_dtor_ex) { + ld->plist_dtor_ex(res TSRMLS_CC); } } else { zend_error(E_WARNING,"Unknown list entry type (%d)", res->type); @@ -276,41 +256,16 @@ void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC) } -ZEND_API int zend_register_list_destructors(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number) -{ - zend_rsrc_list_dtors_entry *lde; - zval zv; - - lde = malloc(sizeof(zend_rsrc_list_dtors_entry)); - lde->list_dtor = ld; - lde->plist_dtor = pld; - lde->list_dtor_ex = lde->plist_dtor_ex = NULL; - lde->module_number = module_number; - lde->resource_id = list_destructors.nNextFreeElement; - lde->type = ZEND_RESOURCE_LIST_TYPE_STD; - lde->type_name = NULL; - ZVAL_PTR(&zv, lde); - - if (zend_hash_next_index_insert(&list_destructors, &zv) == NULL) { - return FAILURE; - } - return list_destructors.nNextFreeElement-1; -} - - ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number) { zend_rsrc_list_dtors_entry *lde; zval zv; lde = malloc(sizeof(zend_rsrc_list_dtors_entry)); - lde->list_dtor = NULL; - lde->plist_dtor = NULL; lde->list_dtor_ex = ld; lde->plist_dtor_ex = pld; lde->module_number = module_number; lde->resource_id = list_destructors.nNextFreeElement; - lde->type = ZEND_RESOURCE_LIST_TYPE_EX; lde->type_name = type_name; ZVAL_PTR(&zv, lde); diff --git a/Zend/zend_list.h b/Zend/zend_list.h index c243b0d9ef..f4e7d7b04d 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -27,18 +27,10 @@ BEGIN_EXTERN_C() -#define ZEND_RESOURCE_LIST_TYPE_STD 1 -#define ZEND_RESOURCE_LIST_TYPE_EX 2 - typedef void (*rsrc_dtor_func_t)(zend_resource *res TSRMLS_DC); #define ZEND_RSRC_DTOR_FUNC(name) void name(zend_resource *res TSRMLS_DC) typedef struct _zend_rsrc_list_dtors_entry { - /* old style destructors */ - void (*list_dtor)(zend_resource *); - void (*plist_dtor)(zend_resource *); - - /* new style destructors */ rsrc_dtor_func_t list_dtor_ex; rsrc_dtor_func_t plist_dtor_ex; @@ -46,12 +38,9 @@ typedef struct _zend_rsrc_list_dtors_entry { int module_number; int resource_id; - unsigned char type; } zend_rsrc_list_dtors_entry; -#define register_list_destructors(ld, pld) zend_register_list_destructors(ld, pld, module_number); -ZEND_API int zend_register_list_destructors(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number); ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number); void list_entry_destructor(zval *ptr); diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 0c1521282a..986f6edd2b 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -556,13 +556,12 @@ static void php_soap_prepare_globals() } while (defaultEncoding[i].details.type != END_KNOWN_TYPES); /* hash by namespace */ -//??? change _mem into _ptr - zend_hash_str_add_mem(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE)-1, XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1, XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE)-1, XSI_NS_PREFIX, sizeof(XSI_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE)-1, XML_NS_PREFIX, sizeof(XML_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1, SOAP_1_1_ENC_NS_PREFIX, sizeof(SOAP_1_1_ENC_NS_PREFIX)); - zend_hash_str_add_mem(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1, SOAP_1_2_ENC_NS_PREFIX, sizeof(SOAP_1_2_ENC_NS_PREFIX)); + zend_hash_str_add_ptr(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE)-1, XSD_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1, XSD_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE)-1, XSI_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE)-1, XML_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1, SOAP_1_1_ENC_NS_PREFIX); + zend_hash_str_add_ptr(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1, SOAP_1_2_ENC_NS_PREFIX); } static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC) @@ -609,22 +608,22 @@ PHP_RINIT_FUNCTION(soap) return SUCCESS; } -static void delete_sdl_res(zend_resource *res) +static void delete_sdl_res(zend_resource *res TSRMLS_CC) { delete_sdl(res->ptr); } -static void delete_url_res(zend_resource *res) +static void delete_url_res(zend_resource *res TSRMLS_CC) { delete_url(res->ptr); } -static void delete_service_res(zend_resource *res) +static void delete_service_res(zend_resource *res TSRMLS_CC) { delete_service(res->ptr); } -static void delete_hashtable_res(zend_resource *res) +static void delete_hashtable_res(zend_resource *res TSRMLS_CC) { delete_hashtable(res->ptr); } @@ -677,10 +676,10 @@ PHP_MINIT_FUNCTION(soap) INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions); soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC); - le_sdl = register_list_destructors(delete_sdl_res, NULL); - le_url = register_list_destructors(delete_url_res, NULL); - le_service = register_list_destructors(delete_service_res, NULL); - le_typemap = register_list_destructors(delete_hashtable_res, NULL); + le_sdl = zend_register_list_destructors_ex(delete_sdl_res, NULL, "SOAP SDL", module_number); + le_url = zend_register_list_destructors_ex(delete_url_res, NULL, "SOAP URL", module_number); + le_service = zend_register_list_destructors_ex(delete_service_res, NULL, "SOAP service", module_number); + le_typemap = zend_register_list_destructors_ex(delete_hashtable_res, NULL, "SOAP table", module_number); REGISTER_LONG_CONSTANT("SOAP_1_1", SOAP_1_1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SOAP_1_2", SOAP_1_2, CONST_CS | CONST_PERSISTENT); @@ -3336,7 +3335,7 @@ static void deserialize_parameters(xmlNodePtr params, sdlFunctionPtr function, i strcmp((char *)params->name, function->functionName) == 0) { num_of_params = 0; } else if (num_of_params > 0) { - tmp_parameters = safe_emalloc(num_of_params, sizeof(zval *), 0); + tmp_parameters = safe_emalloc(num_of_params, sizeof(zval), 0); trav = params; while (trav != 0 && cur_param < num_of_params) {