@ - Add new ZEND_GET_LE macro for retrieving destructor

@   id's from remote extensions. (Jmoore, Zend Engine)
This commit is contained in:
James Moore 2001-05-20 17:06:39 +00:00
parent 65d9584ac0
commit c1164ad5bf
2 changed files with 25 additions and 0 deletions

View file

@ -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; 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) int zend_init_rsrc_list_dtors(void)
{ {

View file

@ -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 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 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 */ 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) \ #define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) \
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 #endif