diff options
author | James Moore <jmoore@php.net> | 2001-05-20 17:06:39 +0000 |
---|---|---|
committer | James Moore <jmoore@php.net> | 2001-05-20 17:06:39 +0000 |
commit | c1164ad5bf728c8fc89f9356e2f38a5c7194c392 (patch) | |
tree | d1d7ce8c6c88cadf18b41d44102eadaf5f4e0e77 | |
parent | 65d9584ac023f7467281c663c1a0b22614ad1fd2 (diff) | |
download | php-git-c1164ad5bf728c8fc89f9356e2f38a5c7194c392.tar.gz |
@ - Add new ZEND_GET_LE macro for retrieving destructor
@ id's from remote extensions. (Jmoore, Zend Engine)
-rw-r--r-- | Zend/zend_list.c | 19 | ||||
-rw-r--r-- | Zend/zend_list.h | 6 |
2 files changed, 25 insertions, 0 deletions
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 |