* dlfcn.cc (dlopen): Drop patch accommodating SetDllDiretory from
2014-10-14.
This commit is contained in:
parent
3d411b0591
commit
4be37ddfc8
|
@ -1,3 +1,8 @@
|
|||
2014-10-27 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* dlfcn.cc (dlopen): Drop patch accommodating SetDllDiretory from
|
||||
2014-10-14.
|
||||
|
||||
2014-10-27 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* cygheap.cc (cygheap_fixup_in_child): Drop call to set_dll_dir.
|
||||
|
|
|
@ -160,34 +160,7 @@ dlopen (const char *name, int flags)
|
|||
if (flags & RTLD_NOLOAD)
|
||||
GetModuleHandleExW (0, path, (HMODULE *) &ret);
|
||||
else
|
||||
{
|
||||
ret = (void *) LoadLibraryW (path);
|
||||
if (!ret && GetLastError () == ERROR_MOD_NOT_FOUND)
|
||||
{
|
||||
/* This may indicate that a dependent DLL could not be loaded.
|
||||
Typically this occurs because we removed the CWD from the
|
||||
DLL search path via SetDllDirectory (see inline function
|
||||
init_cygheap::set_dll_dir), and the load mechanism expects
|
||||
that dlopening a DLL from the CWD allows to load dependent
|
||||
DLLs from the same dir.
|
||||
|
||||
To continue supporting this scenario, call LoadLibraryEx
|
||||
with the LOAD_WITH_ALTERED_SEARCH_PATH flag. This flag
|
||||
replaces the application path with the DLL path in the DLL
|
||||
search order. This functionality needs the full path to
|
||||
the loaded DLL. */
|
||||
if (!strchr (name, '/'))
|
||||
{
|
||||
wchar_t *path_full = tp.w_get ();
|
||||
cygheap->cwd.get (path_full);
|
||||
wcscat (path_full, L"\\");
|
||||
wcscat (path_full, path);
|
||||
path = path_full;
|
||||
}
|
||||
ret = (void *) LoadLibraryExW (path, NULL,
|
||||
LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
}
|
||||
}
|
||||
ret = (void *) LoadLibraryW (path);
|
||||
if (ret && (flags & RTLD_NODELETE))
|
||||
GetModuleHandleExW (GET_MODULE_HANDLE_EX_FLAG_PIN, path,
|
||||
(HMODULE *) &ret);
|
||||
|
|
Loading…
Reference in New Issue