diff options
| author | Zeev Suraski <zeev@php.net> | 1999-09-03 19:12:07 +0000 |
|---|---|---|
| committer | Zeev Suraski <zeev@php.net> | 1999-09-03 19:12:07 +0000 |
| commit | 3feb4b3bdd7d5b662929c7ec7a26507e28335553 (patch) | |
| tree | 32ac4696e0504721a16e67462e678ca9a8afc760 /Zend/zend_list.c | |
| parent | c1a4861eb1b4b5c048bf2ca4cc1acc32fd47d227 (diff) | |
| download | php-git-3feb4b3bdd7d5b662929c7ec7a26507e28335553.tar.gz | |
Add new API for resources
Diffstat (limited to 'Zend/zend_list.c')
| -rw-r--r-- | Zend/zend_list.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c index 44992abd3e..9f4f05774d 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -18,6 +18,8 @@ */ +/* resource lists */ + #include "zend.h" #include "zend_list.h" #include "zend_API.h" @@ -137,6 +139,48 @@ 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 void *zend_fetch_resource_ex(zval *passed_id, int default_id, char *resource_type_name, int num_resource_types, ...) +{ + int id; + int actual_resource_type; + void *resource; + va_list resource_types; + int i; + + if (default_id==-1) { /* use id */ + if (passed_id->type != IS_RESOURCE) { + zend_error(E_WARNING, "Supplied argument is not a valid %s resource", resource_type_name); + return NULL; + } + id = passed_id->value.lval; + } else { + id = default_id; + } + + resource = zend_list_find(id, &actual_resource_type); + if (!resource) { + zend_error(E_WARNING, "%d is not a valid %s resource", resource_type_name); + return NULL; + } + + va_start(resource_types, num_resource_types); + for (i=0; i<num_resource_types; i++) { + if (actual_resource_type == va_arg(resource_types, int)) { + va_end(resource_types); + return resource; + } + } + va_end(resource_types); + return NULL; +} + + int list_entry_destructor(void *ptr) { list_entry *le = (list_entry *) ptr; |
