mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Removed support for old-style resource destructors (only ext/soap used it)
This commit is contained in:
parent
c446e57588
commit
281663f75d
3 changed files with 19 additions and 76 deletions
|
@ -68,19 +68,9 @@ static void zend_resource_dtor(zend_resource *res TSRMLS_DC)
|
||||||
|
|
||||||
ld = zend_hash_index_find_ptr(&list_destructors, res->type);
|
ld = zend_hash_index_find_ptr(&list_destructors, res->type);
|
||||||
if (ld) {
|
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) {
|
if (ld->list_dtor_ex) {
|
||||||
ld->list_dtor_ex(res TSRMLS_CC);
|
ld->list_dtor_ex(res TSRMLS_CC);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
EMPTY_SWITCH_DEFAULT_CASE()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
zend_error(E_WARNING,"Unknown list entry type (%d)", res->type);
|
zend_error(E_WARNING,"Unknown list entry type (%d)", res->type);
|
||||||
}
|
}
|
||||||
|
@ -192,19 +182,9 @@ void plist_entry_destructor(zval *zv)
|
||||||
|
|
||||||
ld = zend_hash_index_find_ptr(&list_destructors, res->type);
|
ld = zend_hash_index_find_ptr(&list_destructors, res->type);
|
||||||
if (ld) {
|
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) {
|
if (ld->plist_dtor_ex) {
|
||||||
ld->plist_dtor_ex(res TSRMLS_CC);
|
ld->plist_dtor_ex(res TSRMLS_CC);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
EMPTY_SWITCH_DEFAULT_CASE()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
zend_error(E_WARNING,"Unknown list entry type (%d)", res->type);
|
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_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;
|
zend_rsrc_list_dtors_entry *lde;
|
||||||
zval zv;
|
zval zv;
|
||||||
|
|
||||||
lde = malloc(sizeof(zend_rsrc_list_dtors_entry));
|
lde = malloc(sizeof(zend_rsrc_list_dtors_entry));
|
||||||
lde->list_dtor = NULL;
|
|
||||||
lde->plist_dtor = NULL;
|
|
||||||
lde->list_dtor_ex = ld;
|
lde->list_dtor_ex = ld;
|
||||||
lde->plist_dtor_ex = pld;
|
lde->plist_dtor_ex = pld;
|
||||||
lde->module_number = module_number;
|
lde->module_number = module_number;
|
||||||
lde->resource_id = list_destructors.nNextFreeElement;
|
lde->resource_id = list_destructors.nNextFreeElement;
|
||||||
lde->type = ZEND_RESOURCE_LIST_TYPE_EX;
|
|
||||||
lde->type_name = type_name;
|
lde->type_name = type_name;
|
||||||
ZVAL_PTR(&zv, lde);
|
ZVAL_PTR(&zv, lde);
|
||||||
|
|
||||||
|
|
|
@ -27,18 +27,10 @@
|
||||||
|
|
||||||
BEGIN_EXTERN_C()
|
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);
|
typedef void (*rsrc_dtor_func_t)(zend_resource *res TSRMLS_DC);
|
||||||
#define ZEND_RSRC_DTOR_FUNC(name) void name(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 {
|
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 list_dtor_ex;
|
||||||
rsrc_dtor_func_t plist_dtor_ex;
|
rsrc_dtor_func_t plist_dtor_ex;
|
||||||
|
|
||||||
|
@ -46,12 +38,9 @@ typedef struct _zend_rsrc_list_dtors_entry {
|
||||||
|
|
||||||
int module_number;
|
int module_number;
|
||||||
int resource_id;
|
int resource_id;
|
||||||
unsigned char type;
|
|
||||||
} zend_rsrc_list_dtors_entry;
|
} 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);
|
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);
|
void list_entry_destructor(zval *ptr);
|
||||||
|
|
|
@ -556,13 +556,12 @@ static void php_soap_prepare_globals()
|
||||||
} while (defaultEncoding[i].details.type != END_KNOWN_TYPES);
|
} while (defaultEncoding[i].details.type != END_KNOWN_TYPES);
|
||||||
|
|
||||||
/* hash by namespace */
|
/* hash by namespace */
|
||||||
//??? change _mem into _ptr
|
zend_hash_str_add_ptr(&defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE)-1, XSD_NS_PREFIX);
|
||||||
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_ptr(&defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1, 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_ptr(&defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE)-1, XSI_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_ptr(&defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE)-1, XML_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_ptr(&defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1, SOAP_1_1_ENC_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_ptr(&defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1, SOAP_1_2_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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC)
|
static void php_soap_init_globals(zend_soap_globals *soap_globals TSRMLS_DC)
|
||||||
|
@ -609,22 +608,22 @@ PHP_RINIT_FUNCTION(soap)
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delete_sdl_res(zend_resource *res)
|
static void delete_sdl_res(zend_resource *res TSRMLS_CC)
|
||||||
{
|
{
|
||||||
delete_sdl(res->ptr);
|
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);
|
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);
|
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);
|
delete_hashtable(res->ptr);
|
||||||
}
|
}
|
||||||
|
@ -677,10 +676,10 @@ PHP_MINIT_FUNCTION(soap)
|
||||||
INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions);
|
INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions);
|
||||||
soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
|
soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
|
||||||
|
|
||||||
le_sdl = register_list_destructors(delete_sdl_res, NULL);
|
le_sdl = zend_register_list_destructors_ex(delete_sdl_res, NULL, "SOAP SDL", module_number);
|
||||||
le_url = register_list_destructors(delete_url_res, NULL);
|
le_url = zend_register_list_destructors_ex(delete_url_res, NULL, "SOAP URL", module_number);
|
||||||
le_service = register_list_destructors(delete_service_res, NULL);
|
le_service = zend_register_list_destructors_ex(delete_service_res, NULL, "SOAP service", module_number);
|
||||||
le_typemap = register_list_destructors(delete_hashtable_res, NULL);
|
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_1", SOAP_1_1, CONST_CS | CONST_PERSISTENT);
|
||||||
REGISTER_LONG_CONSTANT("SOAP_1_2", SOAP_1_2, 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) {
|
strcmp((char *)params->name, function->functionName) == 0) {
|
||||||
num_of_params = 0;
|
num_of_params = 0;
|
||||||
} else if (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;
|
trav = params;
|
||||||
while (trav != 0 && cur_param < num_of_params) {
|
while (trav != 0 && cur_param < num_of_params) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue