static ZEND_FUNCTION(restore_error_handler);
static ZEND_FUNCTION(get_declared_classes);
static ZEND_FUNCTION(create_function);
+static ZEND_FUNCTION(get_resource_type);
#if ZEND_DEBUG
static ZEND_FUNCTION(zend_test_func);
#endif
zval **str;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(str);
RETVAL_LONG((*str)->value.str.len);
zval **s1, **s2;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
zval **s1, **s2, **s3;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
zval **s1, **s2;
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
HashTable *target_hash;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
target_hash = HASH_OF(*array);
if (!target_hash) {
EG(error_reporting)=(*arg)->value.lval;
break;
default:
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
break;
}
}
break;
default:
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
break;
}
switch((*val)->type) {
zval c;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &var)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(var);
zval **arg;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
if ((*arg)->type != IS_OBJECT) {
RETURN_FALSE;
zval **arg;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
if (((*arg)->type != IS_OBJECT) || !(*arg)->value.obj.ce->parent) {
RETURN_FALSE;
zend_class_entry *parent_ce = NULL;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &obj, &class_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
if ((*obj)->type != IS_OBJECT) {
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
zval *tmp;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &obj) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
if ((*obj)->type != IS_OBJECT) {
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
char *lcname;
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &klass, &method_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
if ((*klass)->type != IS_OBJECT) {
RETURN_FALSE;
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
int retval;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &function_name)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(function_name);
lcname = estrndup((*function_name)->value.str.val, (*function_name)->value.str.len);
CLS_FETCH();
if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
array_init(return_value);
ZEND_FUNCTION(get_included_files)
{
if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
array_init(return_value);
CLS_FETCH();
if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
array_init(return_value);
CLS_FETCH();
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &z_function_args, &z_function_code)==FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(z_function_args);
zend_get_parameters(ht, 2, &arg1, &arg2);
}
+
+
+ZEND_FUNCTION(get_resource_type)
+{
+ char *resource_type;
+ zval **z_resource_type;
+
+ if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &z_resource_type)==FAILURE) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ if (Z_TYPE_PP(z_resource_type) != IS_RESOURCE) {
+ zend_error(E_WARNING, "Supplied argument is not a valid resource handle");
+ RETURN_FALSE;
+ }
+
+ resource_type = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(z_resource_type));
+ if (resource_type) {
+ RETURN_STRING(resource_type, 1);
+ } else {
+ RETURN_STRING("Unknown", 1);
+ }
+}
lde.module_number = module_number;
lde.resource_id = list_destructors.nNextFreeElement;
lde.type = ZEND_RESOURCE_LIST_TYPE_STD;
+ lde.type_name = NULL;
if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) {
return FAILURE;
}
-ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number)
+ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number)
{
zend_rsrc_list_dtors_entry lde;
lde.module_number = module_number;
lde.resource_id = list_destructors.nNextFreeElement;
lde.type = ZEND_RESOURCE_LIST_TYPE_EX;
+ lde.type_name = type_name;
if (zend_hash_next_index_insert(&list_destructors,(void *) &lde, sizeof(zend_rsrc_list_dtors_entry),NULL)==FAILURE) {
return FAILURE;
}
+char *zend_rsrc_list_get_rsrc_type(int resource)
+{
+ zend_rsrc_list_dtors_entry *lde;
+
+ if (zend_hash_index_find(&list_destructors, resource, (void **) &lde)==SUCCESS) {
+ return lde->type_name;
+ } else {
+ return NULL;
+ }
+}
+
+
/*
* Local variables:
* tab-width: 4
zend_bool valid;
} zend_rsrc_list_entry;
-typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *le);
+typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *rsrc);
+#define ZEND_RSRC_DTOR_FUNC(name) void name(zend_rsrc_list_entry *rsrc)
typedef struct _zend_rsrc_list_dtors_entry {
/* old style destructors */
rsrc_dtor_func_t list_dtor_ex;
rsrc_dtor_func_t plist_dtor_ex;
+ char *type_name;
+
int module_number;
int resource_id;
unsigned char type;
#define register_list_destructors(ld, pld) zend_register_list_destructors((void (*)(void *))ld, (void (*)(void *))pld, module_number);
ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number);
-ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number);
+ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number);
enum list_entry_type {
LE_DB=1000
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, ...);
+ZEND_API char *zend_rsrc_list_get_rsrc_type(int resource);
+
extern ZEND_API int le_index_ptr; /* list entry type for index pointers */
#define ZEND_VERIFY_RESOURCE(rsrc) \