diff options
author | Thies C. Arntzen <thies@php.net> | 1999-10-12 14:51:17 +0000 |
---|---|---|
committer | Thies C. Arntzen <thies@php.net> | 1999-10-12 14:51:17 +0000 |
commit | 6d7c18c1f511b3d2e8ba5dc50d919ea352bef3ad (patch) | |
tree | fbb76ea1a5119547c4041cd5eab4f85502c6ab8e | |
parent | fc480834372dfc1834f30c112b25a37f3a0cad06 (diff) | |
download | php-git-6d7c18c1f511b3d2e8ba5dc50d919ea352bef3ad.tar.gz |
new improved resource-API
-rw-r--r-- | Zend/zend_list.c | 20 | ||||
-rw-r--r-- | Zend/zend_list.h | 16 |
2 files changed, 25 insertions, 11 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c index 88784b10cd..51a827e708 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -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; } } diff --git a/Zend/zend_list.h b/Zend/zend_list.h index 04ae0c9dac..ac0b4038e5 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -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 |