]> granicus.if.org Git - php/commitdiff
Removed support for old-style resource destructors (only ext/soap used it)
authorDmitry Stogov <dmitry@zend.com>
Thu, 15 May 2014 06:57:03 +0000 (10:57 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 15 May 2014 06:57:03 +0000 (10:57 +0400)
Zend/zend_list.c
Zend/zend_list.h
ext/soap/soap.c

index 7ebe9c13a72b2480c9db6419828582d2dbaa5935..41565408bac37cf002478fce8a78ea71a666d40d 100644 (file)
@@ -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);
        
index c243b0d9ef0cd45510b87e38420d5bf36d71f1f2..f4e7d7b04d3c546a5b4302878ef34c808c1888eb 100644 (file)
 
 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);
index 0c1521282a391e71d5df3de0d0d1f61d91180550..986f6edd2b2a14d5305ebb2e4f5dc2eb2573cb10 100644 (file)
@@ -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) {