summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/dl.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
index 0da5875d9e..bf3c1af007 100644
--- a/ext/standard/dl.c
+++ b/ext/standard/dl.c
@@ -88,24 +88,35 @@ void php_dl(pval *file, int type, pval *return_value)
zend_module_entry *module_entry,*tmp;
zend_module_entry *(*get_module)(void);
int error_type;
+ char *extension_dir;
PLS_FETCH();
ELS_FETCH();
+
+ if (type==MODULE_PERSISTENT) {
+ /* Use the configuration hash directly */
+ if (cfg_get_string("extension_dir", &extension_dir)==FAILURE) {
+ extension_dir = NULL;
+ }
+ } else {
+ extension_dir = PG(extension_dir);
+ }
+
if (type==MODULE_TEMPORARY) {
error_type = E_WARNING;
} else {
error_type = E_CORE_WARNING;
}
- if (PG(extension_dir) && PG(extension_dir)[0]){
- int extension_dir_len = strlen(PG(extension_dir));
+ if (extension_dir && extension_dir[0]){
+ int extension_dir_len = strlen(extension_dir);
libpath = emalloc(extension_dir_len+file->value.str.len+2);
- if (IS_SLASH(PG(extension_dir)[extension_dir_len-1])) {
- sprintf(libpath,"%s%s", PG(extension_dir), file->value.str.val); /* SAFE */
+ if (IS_SLASH(extension_dir[extension_dir_len-1])) {
+ sprintf(libpath,"%s%s", extension_dir, file->value.str.val); /* SAFE */
} else {
- sprintf(libpath,"%s/%s", PG(extension_dir), file->value.str.val); /* SAFE */
+ sprintf(libpath,"%s/%s", extension_dir, file->value.str.val); /* SAFE */
}
} else {
libpath = estrndup(file->value.str.val, file->value.str.len);