Makefile.common. Add -static-libstdc++ to *LDFLAGS. Add dependencies for loadlib.h. * loadlib.h: Update copyright. (_load_sys_library): Properly define set_dll_library as WINAPI to avoid stack corruption.
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* loadlib.h
 | 
						|
 | 
						|
   Copyright 2010, 2011, 2012 Red Hat, Inc.
 | 
						|
 | 
						|
   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 */
 |