]> granicus.if.org Git - php/commitdiff
@ - Add new ZEND_GET_LE macro for retrieving destructor
authorJames Moore <jmoore@php.net>
Sun, 20 May 2001 17:06:39 +0000 (17:06 +0000)
committerJames Moore <jmoore@php.net>
Sun, 20 May 2001 17:06:39 +0000 (17:06 +0000)
@   id's from remote extensions. (Jmoore, Zend Engine)

Zend/zend_list.c
Zend/zend_list.h

index bfab8176d23d3fc0fac68065ffd2c750e6f23b44..2119c25a86501218ba17d77b7cb75f6df4d7c1d1 100644 (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;
 }
 
+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)
 {
index 85085cb9b9ee25b60b901c6d0845e4dede22114f..7509dbf70414af43872b58b870c9c2e7a40d308f 100644 (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 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