@@ -78,6 +78,7 @@ static ZEND_FUNCTION(get_defined_functions);
78
78
static ZEND_FUNCTION (get_defined_vars );
79
79
static ZEND_FUNCTION (create_function );
80
80
static ZEND_FUNCTION (get_resource_type );
81
+ static ZEND_FUNCTION (get_resources );
81
82
static ZEND_FUNCTION (get_loaded_extensions );
82
83
static ZEND_FUNCTION (extension_loaded );
83
84
static ZEND_FUNCTION (get_extension_funcs );
@@ -218,6 +219,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_get_resource_type, 0, 0, 1)
218
219
ZEND_ARG_INFO (0 , res )
219
220
ZEND_END_ARG_INFO ()
220
221
222
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_get_resources , 0 , 0 , 0 )
223
+ ZEND_ARG_INFO (0 , type )
224
+ ZEND_END_ARG_INFO ()
225
+
221
226
ZEND_BEGIN_ARG_INFO_EX (arginfo_get_loaded_extensions , 0 , 0 , 0 )
222
227
ZEND_ARG_INFO (0 , zend_extensions )
223
228
ZEND_END_ARG_INFO ()
@@ -291,6 +296,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
291
296
ZEND_FE (get_defined_vars , arginfo_zend__void )
292
297
ZEND_FE (create_function , arginfo_create_function )
293
298
ZEND_FE (get_resource_type , arginfo_get_resource_type )
299
+ ZEND_FE (get_resources , arginfo_get_resources )
294
300
ZEND_FE (get_loaded_extensions , arginfo_get_loaded_extensions )
295
301
ZEND_FE (extension_loaded , arginfo_extension_loaded )
296
302
ZEND_FE (get_extension_funcs , arginfo_extension_loaded )
@@ -1936,6 +1942,54 @@ ZEND_FUNCTION(get_resource_type)
1936
1942
}
1937
1943
/* }}} */
1938
1944
1945
+ /* {{{ proto array get_resources()
1946
+ Get an array with all active resources */
1947
+ ZEND_FUNCTION (get_resources )
1948
+ {
1949
+ zend_string * type = NULL ;
1950
+ zend_string * key ;
1951
+ ulong index ;
1952
+ zval * val ;
1953
+
1954
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "|S" , & type ) == FAILURE ) {
1955
+ return ;
1956
+ }
1957
+
1958
+ if (!type ) {
1959
+ array_init (return_value );
1960
+ ZEND_HASH_FOREACH_KEY_VAL (& EG (regular_list ), index , key , val ) {
1961
+ if (!key ) {
1962
+ Z_ADDREF_P (val );
1963
+ zend_hash_index_add_new (Z_ARRVAL_P (return_value ), index , val );
1964
+ }
1965
+ } ZEND_HASH_FOREACH_END ();
1966
+ } else if (type -> len == sizeof ("Unknown" )- 1 &&
1967
+ memcmp (type -> val , "Unknown" , sizeof ("Unknown" )- 1 ) == 0 ) {
1968
+ array_init (return_value );
1969
+ ZEND_HASH_FOREACH_KEY_VAL (& EG (regular_list ), index , key , val ) {
1970
+ if (!key && Z_RES_TYPE_P (val ) <= 0 ) {
1971
+ Z_ADDREF_P (val );
1972
+ zend_hash_index_add_new (Z_ARRVAL_P (return_value ), index , val );
1973
+ }
1974
+ } ZEND_HASH_FOREACH_END ();
1975
+ } else {
1976
+ int id = zend_fetch_list_dtor_id (type -> val );
1977
+
1978
+ if (id <= 0 ) {
1979
+ zend_error (E_WARNING , "get_resources(): Unknown resource type '%s'" , type -> val );
1980
+ RETURN_FALSE ;
1981
+ }
1982
+
1983
+ array_init (return_value );
1984
+ ZEND_HASH_FOREACH_KEY_VAL (& EG (regular_list ), index , key , val ) {
1985
+ if (!key && Z_RES_TYPE_P (val ) == id ) {
1986
+ Z_ADDREF_P (val );
1987
+ zend_hash_index_add_new (Z_ARRVAL_P (return_value ), index , val );
1988
+ }
1989
+ } ZEND_HASH_FOREACH_END ();
1990
+ }
1991
+ }
1992
+ /* }}} */
1939
1993
1940
1994
static int add_extension_info (zval * item , void * arg TSRMLS_DC )
1941
1995
{
0 commit comments