]> granicus.if.org Git - php/commitdiff
new improved resource-API
authorThies C. Arntzen <thies@php.net>
Tue, 12 Oct 1999 14:51:17 +0000 (14:51 +0000)
committerThies C. Arntzen <thies@php.net>
Tue, 12 Oct 1999 14:51:17 +0000 (14:51 +0000)
Zend/zend_list.c
Zend/zend_list.h

index 88784b10cdca6a7046339797710b11ff70a05bf8..51a827e708c03c2287ce57e3e8dc75ba0a73e0cb 100644 (file)
@@ -138,13 +138,22 @@ ZEND_API void *zend_plist_find(int id, int *type)
 }
 
 
-ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int resource_type)
-{
-       return zend_fetch_resource_ex(passed_id, default_id, resource_type_name, 1, resource_type);
+ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type)
+{      
+       int rsrc_id;
+
+       rsrc_id = zend_list_insert(rsrc_pointer, rsrc_type);
+       
+       if (rsrc_result) {
+               rsrc_result->value.lval = rsrc_id;
+               rsrc_result->type = IS_RESOURCE;
+       }
+
+       return rsrc_id;
 }
 
 
-ZEND_API void *zend_fetch_resource_ex(zval **passed_id, int default_id, char *resource_type_name, 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, ...)
 {
        int id;
        int actual_resource_type;
@@ -180,6 +189,9 @@ ZEND_API void *zend_fetch_resource_ex(zval **passed_id, int default_id, char *re
        for (i=0; i<num_resource_types; i++) {
                if (actual_resource_type == va_arg(resource_types, int)) {
                        va_end(resource_types);
+                       if (found_resource_type) {
+                               *found_resource_type = actual_resource_type;
+                       }
                        return resource;
                }
        }
index 04ae0c9dac28631d526da2e5f6335557984f0a2a..ac0b4038e5e5ed6a5c564d78202afb41133405d0 100644 (file)
@@ -62,8 +62,9 @@ ZEND_API int zend_list_delete(int id);
 ZEND_API int zend_plist_delete(int id);
 ZEND_API void *zend_list_find(int id, int *type);
 ZEND_API void *zend_plist_find(int id, int *type);
-ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int resource_type);
-ZEND_API void *zend_fetch_resource_ex(zval **passed_id, int default_id, char *resource_type_name, int num_resource_types, ...);
+
+ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type);
+ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...);
 
 extern ZEND_API int le_index_ptr;  /* list entry type for index pointers */
 
@@ -72,14 +73,15 @@ extern ZEND_API int le_index_ptr;  /* list entry type for index pointers */
                RETURN_FALSE;                                   \
        }
 
-
 #define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \
-       rsrc = (rsrc_type) zend_fetch_resource(passed_id, default_id, resource_type_name, resource_type);       \
+       rsrc = (rsrc_type) zend_fetch_resource(passed_id, default_id, resource_type_name, NULL, 1, resource_type);      \
        ZEND_VERIFY_RESOURCE(rsrc);
 
+#define ZEND_FETCH_RESOURCE2(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type1,resource_type2)        \
+       rsrc = (rsrc_type) zend_fetch_resource(passed_id, default_id, resource_type_name, NULL, 2, resource_type1, resource_type2);     \
+       ZEND_VERIFY_RESOURCE(rsrc);
 
-#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type)           \
-       rsrc_result->value.lval = zend_list_insert(rsrc_pointer, rsrc_type);    \
-       rsrc_result->type = IS_RESOURCE
+#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type)  \
+    zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type);
 
 #endif