diff options
author | Johannes Schlüter <johannes@php.net> | 2007-07-31 22:45:08 +0000 |
---|---|---|
committer | Johannes Schlüter <johannes@php.net> | 2007-07-31 22:45:08 +0000 |
commit | c883e25485fd62ee45b51bdac9fa79b17af52bf8 (patch) | |
tree | 2bdc8e79ac92865ef5a91804eaf13ca148b7b450 | |
parent | 2d3577c84ae3dad3afa9f68aa2de85ed75aac902 (diff) | |
download | php-git-c883e25485fd62ee45b51bdac9fa79b17af52bf8.tar.gz |
- Add additional param to get_loaded_extensions() for returning Zend
extensions (Fixes #41278)
-rw-r--r-- | Zend/tests/017.phpt | 10 | ||||
-rw-r--r-- | Zend/zend_builtin_functions.c | 33 |
2 files changed, 33 insertions, 10 deletions
diff --git a/Zend/tests/017.phpt b/Zend/tests/017.phpt index 1c6513916f..b336d54eb0 100644 --- a/Zend/tests/017.phpt +++ b/Zend/tests/017.phpt @@ -10,9 +10,9 @@ var_dump(get_resource_type($fp)); fclose($fp); var_dump(get_resource_type($fp)); -var_dump(get_loaded_extensions(true)); var_dump(gettype(get_loaded_extensions())); var_dump(count(get_loaded_extensions())); +var_dump(count(get_loaded_extensions(true))); define("USER_CONSTANT", "test"); @@ -50,11 +50,9 @@ Warning: Supplied argument is not a valid resource handle in %s on line %d bool(false) string(6) "stream" string(7) "Unknown" - -Warning: Wrong parameter count for get_loaded_extensions() in %s on line %d -NULL string(5) "array" int(%d) +int(2) Warning: Wrong parameter count for get_defined_constants() in %s on line %d NULL @@ -88,11 +86,9 @@ Warning: Supplied argument is not a valid resource handle in %s on line %d bool(false) unicode(6) "stream" unicode(7) "Unknown" - -Warning: Wrong parameter count for get_loaded_extensions() in %s on line %d -NULL unicode(5) "array" int(%d) +int(2) Warning: Wrong parameter count for get_defined_constants() in %s on line %d NULL diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index ea1c443d4d..7cf77e8f5a 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -24,6 +24,7 @@ #include "zend_builtin_functions.h" #include "zend_constants.h" #include "zend_ini.h" +#include "zend_extensions.h" #undef ZEND_TEST_EXCEPTIONS @@ -1644,6 +1645,14 @@ static int add_extension_info(zend_module_entry *module, void *arg TSRMLS_DC) /* } /* }}} */ +static int add_zendext_info(zend_extension *ext, void *arg TSRMLS_DC) /* {{{ */ +{ + zval *name_array = (zval *)arg; + add_next_index_ascii_string(name_array, ext->name, 1); + return 0; +} +/* }}} */ + static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC) /* {{{ */ { zval *name_array = (zval *)arg; @@ -1658,16 +1667,34 @@ static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC) /* {{ } /* }}} */ -/* {{{ proto array get_loaded_extensions(void) U +/* {{{ proto array get_loaded_extensions([mixed categorize]) U Return an array containing names of loaded extensions */ ZEND_FUNCTION(get_loaded_extensions) { - if (ZEND_NUM_ARGS() != 0) { + int argc = ZEND_NUM_ARGS(); + + if (argc != 0 && argc != 1) { ZEND_WRONG_PARAM_COUNT(); } array_init(return_value); - zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) add_extension_info, return_value TSRMLS_CC); + + if (argc) { + zval *modules; + zval *extensions; + + MAKE_STD_ZVAL(modules); + array_init(modules); + zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) add_extension_info, modules TSRMLS_CC); + add_ascii_assoc_zval_ex(return_value, "PHP Modules", sizeof("PHP Modules"), modules); + + MAKE_STD_ZVAL(extensions); + array_init(extensions); + zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) add_zendext_info, extensions TSRMLS_CC); + add_ascii_assoc_zval_ex(return_value, "Zend Extensions", sizeof("Zend Extensions"), extensions); + } else { + zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) add_extension_info, return_value TSRMLS_CC); + } } /* }}} */ |