60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			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 */
 |