summaryrefslogtreecommitdiff
path: root/dso
diff options
context:
space:
mode:
Diffstat (limited to 'dso')
-rw-r--r--dso/win32/dso.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/dso/win32/dso.c b/dso/win32/dso.c
index d4a689387..085470905 100644
--- a/dso/win32/dso.c
+++ b/dso/win32/dso.c
@@ -77,8 +77,24 @@ APR_DECLARE(apr_status_t) apr_dso_load(struct apr_dso_handle_t **res_handle,
os_handle = LoadLibraryExW(wpath, NULL, 0);
if (!os_handle)
os_handle = LoadLibraryExW(wpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (!os_handle)
+ if (!os_handle) {
+#ifndef _WIN32_WCE
+ apr_wchar_t *ignored;
+ apr_wchar_t fpath[APR_PATH_MAX];
+ rv = apr_get_os_error();
+ if (GetFullPathNameW(wpath, sizeof(fpath) / sizeof(apr_wchar_t), fpath, &ignored)) {
+ if (SetDllDirectoryW(fpath)) {
+ os_handle = LoadLibraryExW(fpath, NULL, 0);
+ if (!os_handle)
+ os_handle = LoadLibraryExW(fpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ if (os_handle)
+ rv = APR_SUCCESS;
+ }
+ }
+#else
rv = apr_get_os_error();
+#endif
+ }
#ifndef _WIN32_WCE
SetErrorMode(em);
#endif