]> granicus.if.org Git - php/commitdiff
- MFH: Add additional param to get_loaded_extensions() for returning Zend
authorJohannes Schlüter <johannes@php.net>
Tue, 31 Jul 2007 22:47:25 +0000 (22:47 +0000)
committerJohannes Schlüter <johannes@php.net>
Tue, 31 Jul 2007 22:47:25 +0000 (22:47 +0000)
  extensions (Fixes #41278) [DOC]

Zend/tests/017.phpt
Zend/zend_builtin_functions.c

index e8a5cfe857f50ac41e8be2ea4d7405876962fc29..bdf2ea727388565b5d1214cbff7801fd10514306 100644 (file)
@@ -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
index 0d45d5a32eaf0a171ceb286bcc4049ac54f04379..e4fd10226f33d8948f516978c0336a9af44d56ea 100644 (file)
@@ -25,6 +25,7 @@
 #include "zend_constants.h"
 #include "zend_ini.h"
 #include "zend_exceptions.h"
+#include "zend_extensions.h"
 
 #undef ZEND_TEST_EXCEPTIONS
 
@@ -1548,6 +1549,13 @@ static int add_extension_info(zend_module_entry *module, void *arg TSRMLS_DC)
        return 0;
 }
 
+static int add_zendext_info(zend_extension *ext, void *arg TSRMLS_DC)
+{
+       zval *name_array = (zval *)arg;
+       add_next_index_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;
@@ -1562,16 +1570,34 @@ static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC)
 }
 
 
-/* {{{ proto array get_loaded_extensions(void)
+/* {{{ 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_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_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);
+       }
 }
 /* }}} */