diff options
| author | Dmitry Stogov <dmitry@php.net> | 2005-06-17 09:39:23 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2005-06-17 09:39:23 +0000 |
| commit | f47c78487bda814ccb1de09fe44fe9a6b4082c30 (patch) | |
| tree | b6abddf041fb917f5545741ea8928be9ebb66985 /ext | |
| parent | c0c7a9f0101f5488cbf861390f5a89feaebcc94a (diff) | |
| download | php-git-f47c78487bda814ccb1de09fe44fe9a6b4082c30.tar.gz | |
Improved PHP extension loading mechanism with support for module dependencies and conflicts
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/dom/php_dom.c | 12 | ||||
| -rwxr-xr-x | ext/pdo/pdo.c | 13 | ||||
| -rwxr-xr-x | ext/pdo_mysql/pdo_mysql.c | 10 | ||||
| -rw-r--r-- | ext/pdo_sqlite/pdo_sqlite.c | 11 | ||||
| -rw-r--r-- | ext/sqlite/sqlite.c | 19 | ||||
| -rw-r--r-- | ext/standard/dl.c | 14 | ||||
| -rw-r--r-- | ext/standard/dl.h | 3 |
7 files changed, 70 insertions, 12 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 8253cab243..de5179f052 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -404,8 +404,18 @@ static zend_object_handlers* dom_get_obj_handlers(TSRMLS_D) { } } +static zend_module_dep dom_deps[] = { + ZEND_MOD_REQUIRED("libxml") + ZEND_MOD_CONFLICTS("domxml") +#ifdef HAVE_SIMPLEXML + ZEND_MOD_REQUIRED("simplexml") +#endif + {NULL, NULL, NULL} +}; + zend_module_entry dom_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + dom_deps, "dom", dom_functions, PHP_MINIT(dom), diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c index ddbc8478b7..27b05f24e4 100755 --- a/ext/pdo/pdo.c +++ b/ext/pdo/pdo.c @@ -86,9 +86,20 @@ function_entry pdo_functions[] = { }; /* }}} */ +/* {{{ pdo_functions[] */ +static zend_module_dep pdo_deps[] = { +#ifdef HAVE_SPL + ZEND_MOD_REQUIRED("spl") +#endif + {NULL, NULL, NULL} +}; + +/* }}} */ + /* {{{ pdo_module_entry */ zend_module_entry pdo_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_deps, "PDO", pdo_functions, PHP_MINIT(pdo), diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c index 819c44f0d7..ff3321376d 100755 --- a/ext/pdo_mysql/pdo_mysql.c +++ b/ext/pdo_mysql/pdo_mysql.c @@ -36,9 +36,17 @@ function_entry pdo_mysql_functions[] = { }; /* }}} */ +/* {{{ pdo_mysql_functions[] */ +static zend_module_dep pdo_mysql_deps[] = { + ZEND_MOD_REQUIRED("pdo") + {NULL, NULL, NULL} +}; +/* }}} */ + /* {{{ pdo_mysql_module_entry */ zend_module_entry pdo_mysql_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_mysql_deps, "pdo_mysql", pdo_mysql_functions, PHP_MINIT(pdo_mysql), diff --git a/ext/pdo_sqlite/pdo_sqlite.c b/ext/pdo_sqlite/pdo_sqlite.c index 10ac1acb6f..d641f2d2f6 100644 --- a/ext/pdo_sqlite/pdo_sqlite.c +++ b/ext/pdo_sqlite/pdo_sqlite.c @@ -39,10 +39,19 @@ function_entry pdo_sqlite_functions[] = { }; /* }}} */ +/* {{{ pdo_sqlite_deps + */ +static zend_module_dep pdo_sqlite_deps[] = { + ZEND_MOD_REQUIRED("pdo") + {NULL, NULL, NULL} +}; +/* }}} */ + /* {{{ pdo_sqlite_module_entry */ zend_module_entry pdo_sqlite_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_sqlite_deps, "pdo_sqlite", pdo_sqlite_functions, PHP_MINIT(pdo_sqlite), diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c index f0cf248076..7673b428fb 100644 --- a/ext/sqlite/sqlite.c +++ b/ext/sqlite/sqlite.c @@ -267,8 +267,25 @@ function_entry sqlite_funcs_exception[] = { {NULL, NULL, NULL} }; +/* Dependancies */ +static zend_module_dep sqlite_deps[] = { +#if defined(HAVE_SPL) && ((PHP_MAJOR_VERSION > 5) || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 1)) + ZEND_MOD_REQUIRED("spl") +#endif +#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION) + ZEND_MOD_REQUIRED("session") +#endif +#if PHP_SQLITE2_HAVE_PDO + ZEND_MOD_REQUIRED("pdo") +#endif + {NULL, NULL, NULL} +}; + zend_module_entry sqlite_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 +#if ZEND_MODULE_API_NO >= 20050608 + STANDARD_MODULE_HEADER_EX, NULL, + sqlite_deps, +#elif ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "SQLite", diff --git a/ext/standard/dl.c b/ext/standard/dl.c index 8d311aa2df..5d83fc7451 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -54,7 +54,7 @@ Load a PHP extension at runtime */ PHP_FUNCTION(dl) { - pval **file; + zval **file; /* obtain arguments */ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { @@ -99,7 +99,7 @@ PHP_FUNCTION(dl) /* {{{ php_dl */ -void php_dl(pval *file, int type, pval *return_value TSRMLS_DC) +void php_dl(zval *file, int type, zval *return_value TSRMLS_DC) { void *handle; char *libpath; @@ -224,14 +224,18 @@ void php_dl(pval *file, int type, pval *return_value TSRMLS_DC) RETURN_FALSE; } + if (type == MODULE_TEMPORARY && zend_startup_module(module_entry TSRMLS_CC) == FAILURE) { + DL_UNLOAD(handle); + RETURN_FALSE; + } + if ((type == MODULE_TEMPORARY) && module_entry->request_startup_func) { - if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC)) { + if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC) == FAILURE) { php_error_docref(NULL TSRMLS_CC, error_type, "Unable to initialize module '%s'", module_entry->name); DL_UNLOAD(handle); RETURN_FALSE; } } - RETURN_TRUE; } /* }}} */ @@ -243,7 +247,7 @@ PHP_MINFO_FUNCTION(dl) #else -void php_dl(pval *file, int type, pval *return_value TSRMLS_DC) +void php_dl(zval *file, int type, zval *return_value TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot dynamically load %s - dynamic modules are not supported", Z_STRVAL_P(file)); RETURN_FALSE; diff --git a/ext/standard/dl.h b/ext/standard/dl.h index 1f5c9b5ecf..81bb8697df 100644 --- a/ext/standard/dl.h +++ b/ext/standard/dl.h @@ -23,8 +23,7 @@ #ifndef DL_H #define DL_H -PHPAPI void php_dl(pval *file,int type,pval *return_value TSRMLS_DC); - +PHPAPI void php_dl(zval *file,int type, zval *return_value TSRMLS_DC); /* dynamic loading functions */ PHP_FUNCTION(dl); |
