--- Zend/zend_extensions.c-org 2006-04-03 00:34:54.000000000 +0900 +++ Zend/zend_extensions.c 2006-04-03 01:24:31.000000000 +0900 @@ -20,6 +20,9 @@ /* $Id: zend_extensions.c,v 1.48.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend_extensions.h" +#include "zend_API.h" +#include "zend_ini.h" +#include "tsrm_virtual_cwd.h" ZEND_API zend_llist zend_extensions; static int last_resource_number; @@ -30,8 +33,28 @@ DL_HANDLE handle; zend_extension *new_extension; zend_extension_version_info *extension_version_info; + char *libpath; + char *extension_dir; - handle = DL_LOAD(path); + extension_dir = INI_STR("extension_dir"); + if (IS_SLASH(path[0])) { + libpath = estrndup(path, strlen(path)); + } else if (extension_dir && extension_dir[0]){ + int extension_dir_len = strlen(extension_dir); + + libpath = emalloc(extension_dir_len+strlen(path)+2); + + if (IS_SLASH(extension_dir[extension_dir_len-1])) { + sprintf(libpath, "%s%s", extension_dir, path); /* SAFE */ + } else { + sprintf(libpath, "%s%c%s", extension_dir, DEFAULT_SLASH, path); /* SAFE */ + } + } else { + libpath = estrndup(path, strlen(path)); + } + + handle = DL_LOAD(libpath); + efree(libpath); if (!handle) { #ifndef ZEND_WIN32 fprintf(stderr, "Failed loading %s: %s\n", path, DL_ERROR());