90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * dllcrt1.c
 | 
						|
 *
 | 
						|
 * Initialization code for DLLs.
 | 
						|
 *
 | 
						|
 * This file is part of the Mingw32 package.
 | 
						|
 *
 | 
						|
 * Contributors:
 | 
						|
 *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
 | 
						|
 *  DLL support adapted from Gunther Ebert <gunther.ebert@ixos-leipzig.de>
 | 
						|
 *  Maintained by Mumit Khan <khan@xraylith.wisc.EDU>
 | 
						|
 *
 | 
						|
 *  THIS SOFTWARE IS NOT COPYRIGHTED
 | 
						|
 *
 | 
						|
 *  This source code is offered for use in the public domain. You may
 | 
						|
 *  use, modify or distribute it freely.
 | 
						|
 *
 | 
						|
 *  This code is distributed in the hope that it will be useful but
 | 
						|
 *  WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY
 | 
						|
 *  DISCLAMED. This includes but is not limited to warrenties of
 | 
						|
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 *
 | 
						|
 * $Revision$
 | 
						|
 * $Author$
 | 
						|
 * $Date$
 | 
						|
 * 
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <io.h>
 | 
						|
#include <process.h>
 | 
						|
#include <windows.h>
 | 
						|
 | 
						|
/* Unlike normal crt1, I don't initialize the FPU, because the process
 | 
						|
 * should have done that already. I also don't set the file handle modes,
 | 
						|
 * because that would be rude. */
 | 
						|
 | 
						|
#ifdef	__GNUC__
 | 
						|
extern void __main ();
 | 
						|
extern void __do_global_dtors ();
 | 
						|
#endif
 | 
						|
 | 
						|
extern BOOL WINAPI DllMain (HANDLE, DWORD, LPVOID);
 | 
						|
 | 
						|
BOOL WINAPI
 | 
						|
DllMainCRTStartup (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
 | 
						|
{
 | 
						|
  BOOL bRet;
 | 
						|
 | 
						|
  if (dwReason == DLL_PROCESS_ATTACH)
 | 
						|
    {
 | 
						|
#ifdef	__GNUC__
 | 
						|
      /* From libgcc.a, calls global class constructors. */
 | 
						|
      __main ();
 | 
						|
#endif
 | 
						|
    }
 | 
						|
 | 
						|
  /*
 | 
						|
   * Call the user-supplied DllMain subroutine
 | 
						|
   * NOTE: DllMain is optional, so libmingw32.a includes a stub
 | 
						|
   *       which will be used if the user does not supply one.
 | 
						|
   */
 | 
						|
  bRet = DllMain (hDll, dwReason, lpReserved);
 | 
						|
 | 
						|
#ifdef	__GNUC__
 | 
						|
  if (dwReason == DLL_PROCESS_DETACH)
 | 
						|
    {
 | 
						|
      /* From libgcc.a, calls global class destructors. */
 | 
						|
      __do_global_dtors ();
 | 
						|
    }
 | 
						|
#endif
 | 
						|
 | 
						|
  return bRet;
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * For the moment a dummy atexit. Atexit causes problems in DLLs, especially
 | 
						|
 * if they are dynamically loaded. For now atexit inside a DLL does nothing.
 | 
						|
 * NOTE: We need this even if the DLL author never calls atexit because
 | 
						|
 *       the global constructor function __do_global_ctors called from __main
 | 
						|
 *       will attempt to register __do_global_dtors using atexit.
 | 
						|
 *       Thanks to Andrey A. Smirnov for pointing this one out.
 | 
						|
 */
 | 
						|
int
 | 
						|
atexit (void (*pfn) ())
 | 
						|
{
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 |