]> granicus.if.org Git - php/commitdiff
Added get_loaded_extensions(), extension_loaded(), and
authorAndrei Zmievski <andrei@php.net>
Thu, 16 Dec 1999 23:47:10 +0000 (23:47 +0000)
committerAndrei Zmievski <andrei@php.net>
Thu, 16 Dec 1999 23:47:10 +0000 (23:47 +0000)
get_extension_funcs() functions.
@ Added get_loaded_extensions(), extension_loaded(), and
get_extension_funcs() functions. (Andrei)

TODO
ext/standard/basic_functions.c
ext/standard/basic_functions.h

diff --git a/TODO b/TODO
index d06a13c05f57f97f00e20744d801c92df460d9cd..0d0f87cf1ce47a9491d1c401f6b04157c0549b11 100644 (file)
--- a/TODO
+++ b/TODO
@@ -26,10 +26,7 @@ ext/oci8
 ext/standard
 ------------
     * strpad() (Andrei)
-       * comparing arrays semantically (Andrei)
-       * get_loaded_extensions()
-      extension_loaded()
-      get_extension_funcs() (Andrei)
+       * comparing arrays semantically (like Python) (Andrei)
        * NOT binary safe:
                strtok()
                basename()
index d92fbac3c50ccbceb0499edd6491937d6719f223..8538ab0c66eb48ddc6cfbec0809fe2cbc587a162 100644 (file)
@@ -309,6 +309,10 @@ function_entry basic_functions[] = {
        PHP_FE(connection_status,                       NULL)
        PHP_FE(ignore_user_abort,                       NULL)
 
+       PHP_FE(get_loaded_extensions,           NULL)
+       PHP_FE(extension_loaded,                        NULL)
+       PHP_FE(get_extension_funcs,                     NULL)
+       
        {NULL, NULL, NULL}
 };
 
@@ -1500,6 +1504,75 @@ PHP_FUNCTION(getprotobynumber)
 /* }}} */
 
 
+static int php_add_extension_info(zend_module_entry *module, void *arg)
+{
+       zval *name_array = (zval *)arg;
+       add_next_index_string(name_array, module->name, 1);
+       return 0;
+}
+
+/* {{{ proto array get_loaded_extensions(void)
+   Return an array containing names of loaded extensions */
+PHP_FUNCTION(get_loaded_extensions)
+{
+       if (ARG_COUNT(ht) != 0) {
+               WRONG_PARAM_COUNT;
+       }
+
+       array_init(return_value);
+       zend_hash_apply_with_argument(&module_registry, (int (*)(void *, void*)) php_add_extension_info, return_value);
+}
+/* }}} */
+
+
+/* {{{ proto bool extension_loaded(string extension_name)
+   Returns true if the named extension is loaded */
+PHP_FUNCTION(extension_loaded)
+{
+       zval **extension_name;
+
+       if (ARG_COUNT(ht) != 1 || getParametersEx(1, &extension_name)) {
+               WRONG_PARAM_COUNT;
+       }
+
+       convert_to_string_ex(extension_name);
+       if (zend_hash_exists(&module_registry, (*extension_name)->value.str.val, (*extension_name)->value.str.len+1)) {
+               RETURN_TRUE;
+       } else {
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+
+
+/* proto array get_extension_funcs(string extension_name)
+   Returns an array with the names of functions belonging to the named extension */
+PHP_FUNCTION(get_extension_funcs)
+{
+       zval **extension_name;
+       zend_module_entry *module;
+       zend_function_entry *func;
+
+       if (ARG_COUNT(ht) != 1 || getParametersEx(1, &extension_name)) {
+               WRONG_PARAM_COUNT;
+       }
+
+       convert_to_string_ex(extension_name);
+       if (zend_hash_find(&module_registry, (*extension_name)->value.str.val,
+                                      (*extension_name)->value.str.len+1, (void**)&module) == FAILURE) {
+               return;
+       }
+
+       array_init(return_value);
+       func = module->functions;
+       while(func->fname) {
+               add_next_index_string(return_value, func->fname, 1);
+               func++;
+       }
+}
+/* }}} */
+
+
 /*
  * Local variables:
  * tab-width: 4
index 188f9ffc54fc2e84fa8338c61c79ac6963c8a20d..cde57adcb785b74729883c0bdbcea4b1e64b9fb9 100644 (file)
@@ -103,6 +103,10 @@ PHP_FUNCTION(getservbyport);
 PHP_FUNCTION(getprotobyname);
 PHP_FUNCTION(getprotobynumber);
 
+PHP_FUNCTION(get_loaded_extensions);
+PHP_FUNCTION(extension_loaded);
+PHP_FUNCTION(get_extension_funcs);
+
 #if MSVC5
 typedef unsigned int php_stat_len;
 #else