libc/winsup/utils/loadlib.h
Corinna Vinschen 6e623e9320 Switching the Cygwin DLL to LGPLv3+, dropping commercial buyout option
Bump GPLv2+ to GPLv3+ for some files, clarify BSD 2-clause.

Everything else stays under GPLv3+.

New Linking Exception exempts resulting executables from LGPLv3 section 4.

Add CONTRIBUTORS file to keep track of licensing.

Remove 'Copyright Red Hat Inc' comments.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-06-23 10:09:17 +02:00

60 lines
1.7 KiB
C

/* loadlib.h
This file is part of Cygwin.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#ifndef _LOADLIB_H
#define _LOADLIB_H
#include <windows.h>
#include <wchar.h>
/* Load all system libs from the windows system directory by prepending the
full path. This doesn't work for loadling cygwin1.dll. For this case,
instead of prepending the path, make sure that the CWD is removed from
the DLL search path, if possible (XP SP1++, Vista++). */
static HMODULE _load_sys_library (const wchar_t *dll) __attribute__ ((used));
static HMODULE
_load_sys_library (const wchar_t *dll)
{
static BOOL WINAPI (*set_dll_directory)(LPCWSTR);
static WCHAR sysdir[MAX_PATH];
static UINT sysdir_len;
WCHAR dllpath[MAX_PATH];
if (!sysdir_len)
{
sysdir_len = GetSystemDirectoryW (sysdir, MAX_PATH);
sysdir[sysdir_len++] = L'\\';
sysdir[sysdir_len] = L'\0';
}
if (!set_dll_directory)
{
HMODULE k32 = GetModuleHandleW (L"kernel32.dll");
if (k32)
set_dll_directory = (BOOL WINAPI (*)(LPCWSTR))
GetProcAddress (k32, "SetDllDirectoryW");
if (!set_dll_directory)
set_dll_directory = (BOOL WINAPI (*)(LPCWSTR)) -1;
else
set_dll_directory (L"");
}
if (wcscmp (dll, L"cygwin1.dll") == 0)
return LoadLibraryExW (L"cygwin1.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
wcscpy (dllpath, sysdir);
wcscpy (dllpath + sysdir_len, dll);
return LoadLibraryExW (dllpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
}
#define LoadLibraryW(d) _load_sys_library(d)
#define LoadLibraryA(d) _load_sys_library(L##d)
#endif /* _LOADLIB_H */