From: James Moore Date: Sun, 20 May 2001 17:06:39 +0000 (+0000) Subject: @ - Add new ZEND_GET_LE macro for retrieving destructor X-Git-Tag: PRE_GRANULAR_GARBAGE_FIX~326 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c1164ad5bf728c8fc89f9356e2f38a5c7194c392;p=php @ - Add new ZEND_GET_LE macro for retrieving destructor @ id's from remote extensions. (Jmoore, Zend Engine) --- diff --git a/Zend/zend_list.c b/Zend/zend_list.c index bfab8176d2..2119c25a86 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -317,6 +317,25 @@ ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_fu return list_destructors.nNextFreeElement-1; } +ZEND_API int zend_fetch_list_dtor_id(char *type_name) +{ + zend_rsrc_list_dtors_entry *lde; + HashPosition pos; + + zend_hash_internal_pointer_reset_ex(&list_destructors, &pos); + while(zend_hash_get_current_data_ex(&list_destructors, (void **)&lde, &pos) == SUCCESS) { + if(strcmp(type_name, lde->type_name) == 0) + { +#if 0 + printf("Found resource id %d for resource type %s\n",(*lde).resource_id,type_name); +#endif + return lde->resource_id; + } + zend_hash_move_forward_ex(&list_destructors, &pos); + } + + return 0; +} int zend_init_rsrc_list_dtors(void) { diff --git a/Zend/zend_list.h b/Zend/zend_list.h index 85085cb9b9..7509dbf704 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -82,6 +82,7 @@ ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int r ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...); ZEND_API char *zend_rsrc_list_get_rsrc_type(int resource); +ZEND_API int zend_fetch_list_dtor_id(char *type_name); extern ZEND_API int le_index_ptr; /* list entry type for index pointers */ @@ -101,4 +102,9 @@ extern ZEND_API int le_index_ptr; /* list entry type for index pointers */ #define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) \ zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type); +#define ZEND_GET_LE(le_id, le_type_name) \ + if(le_id == 0) { \ + le_id = zend_fetch_list_dtor_id(le_type_name); \ + } + #endif