summaryrefslogtreecommitdiff
path: root/Zend/zend_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_list.c')
-rw-r--r--Zend/zend_list.c120
1 files changed, 67 insertions, 53 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index ceedadf467..2c653782ee 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -89,77 +89,91 @@ ZEND_API int zend_list_close(zend_resource *res)
return SUCCESS;
}
-ZEND_API zend_resource* zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type)
+ZEND_API zend_resource* zend_register_resource(void *rsrc_pointer, int rsrc_type)
{
zval *zv;
zv = zend_list_insert(rsrc_pointer, rsrc_type);
- if (rsrc_result) {
- ZVAL_COPY_VALUE(rsrc_result, zv);
- return Z_RES_P(rsrc_result);
- } else {
- return Z_RES_P(zv);
- }
+ return Z_RES_P(zv);
}
-ZEND_API void *zend_fetch_resource(zval *passed_id, int default_id, const char *resource_type_name, int *found_resource_type, int num_resource_types, ...)
+ZEND_API void *zend_fetch_resource2(zend_resource *res, const char *resource_type_name, int resource_type1, int resource_type2)
{
- int actual_resource_type;
-// void *resource;
- va_list resource_types;
- int i;
- zend_resource *res;
- const char *space;
- const char *class_name;
-
- if (default_id==-1) { /* use id */
- if (!passed_id) {
- if (resource_type_name) {
- class_name = get_active_class_name(&space);
- zend_error(E_WARNING, "%s%s%s(): no %s resource supplied", class_name, space, get_active_function_name(), resource_type_name);
- }
- return NULL;
- } else if (Z_TYPE_P(passed_id) != IS_RESOURCE) {
- if (resource_type_name) {
- class_name = get_active_class_name(&space);
- zend_error(E_WARNING, "%s%s%s(): supplied argument is not a valid %s resource", class_name, space, get_active_function_name(), resource_type_name);
- }
- return NULL;
- }
- } else {
- passed_id = zend_hash_index_find(&EG(regular_list), default_id);
- if (!passed_id) {
- if (resource_type_name) {
- class_name = get_active_class_name(&space);
- zend_error(E_WARNING, "%s%s%s(): %d is not a valid %s resource", class_name, space, get_active_function_name(), default_id, resource_type_name);
- }
- return NULL;
- }
+ if (resource_type1 == res->type) {
+ return res->ptr;
}
- res = Z_RES_P(passed_id);
- actual_resource_type = res->type;
-
- 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);
- if (found_resource_type) {
- *found_resource_type = actual_resource_type;
- }
- return res->ptr;
- }
+
+ if (resource_type2 == res->type) {
+ return res->ptr;
+ }
+
+ if (resource_type_name) {
+ const char *space;
+ const char *class_name = get_active_class_name(&space);
+ zend_error(E_WARNING, "%s%s%s(): supplied resource is not a valid %s resource", class_name, space, get_active_function_name(), resource_type_name);
+ }
+
+ return NULL;
+}
+
+ZEND_API void *zend_fetch_resource(zend_resource *res, const char *resource_type_name, int resource_type)
+{
+ if (resource_type == res->type) {
+ return res->ptr;
}
- va_end(resource_types);
if (resource_type_name) {
- class_name = get_active_class_name(&space);
+ const char *space;
+ const char *class_name = get_active_class_name(&space);
zend_error(E_WARNING, "%s%s%s(): supplied resource is not a valid %s resource", class_name, space, get_active_function_name(), resource_type_name);
}
return NULL;
}
+ZEND_API void *zend_fetch_resource_ex(zval *res, const char *resource_type_name, int resource_type)
+{
+ const char *space, *class_name;
+ if (res == NULL) {
+ if (resource_type_name) {
+ class_name = get_active_class_name(&space);
+ zend_error(E_WARNING, "%s%s%s(): no %s resource supplied", class_name, space, get_active_function_name(), resource_type_name);
+ }
+ return NULL;
+ }
+ if (Z_TYPE_P(res) != IS_RESOURCE) {
+ if (resource_type_name) {
+ class_name = get_active_class_name(&space);
+ zend_error(E_WARNING, "%s%s%s(): supplied argument is not a valid %s resource", class_name, space, get_active_function_name(), resource_type_name);
+ }
+ return NULL;
+ }
+
+ return zend_fetch_resource(Z_RES_P(res), resource_type_name, resource_type);
+}
+
+ZEND_API void *zend_fetch_resource2_ex(zval *res, const char *resource_type_name, int resource_type1, int resource_type2)
+{
+ const char *space, *class_name;
+ if (res == NULL) {
+ if (resource_type_name) {
+ class_name = get_active_class_name(&space);
+ zend_error(E_WARNING, "%s%s%s(): no %s resource supplied", class_name, space, get_active_function_name(), resource_type_name);
+ }
+ return NULL;
+ }
+ if (Z_TYPE_P(res) != IS_RESOURCE) {
+ if (resource_type_name) {
+ class_name = get_active_class_name(&space);
+ zend_error(E_WARNING, "%s%s%s(): supplied argument is not a valid %s resource", class_name, space, get_active_function_name(), resource_type_name);
+ }
+ return NULL;
+ }
+
+ return zend_fetch_resource2(Z_RES_P(res), resource_type_name, resource_type1, resource_type2);
+}
+
void list_entry_destructor(zval *zv)
{
zend_resource *res = Z_RES_P(zv);