103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* dll_init.h
 | 
						|
 | 
						|
   Copyright 1998 Cygnus Solutions
 | 
						|
 | 
						|
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. */
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// list of loaded DLL (used by fork & init)
 | 
						|
class DllList
 | 
						|
{
 | 
						|
public:
 | 
						|
  static DllList& the ();
 | 
						|
 | 
						|
  // return dll index used for freeDll
 | 
						|
  int recordDll (HMODULE, per_process*);
 | 
						|
  void detachDll (int dll_index);
 | 
						|
 | 
						|
  // called after initialization of main module in dll_crt0
 | 
						|
  void initAll ();
 | 
						|
 | 
						|
  // global destructors of loaded dlls
 | 
						|
  void doGlobalDestructorsOfDlls ();
 | 
						|
 | 
						|
  // number of dlls dlopened
 | 
						|
  int numberOfOpenedDlls ();
 | 
						|
 | 
						|
  // boolean to determine if forked process must reload dlls opened with
 | 
						|
  // LoadLibrary or dlopen ...
 | 
						|
  // default = 0 (FALSE)
 | 
						|
  int forkeeMustReloadDlls ();
 | 
						|
  void forkeeMustReloadDlls (int);
 | 
						|
 | 
						|
  void forkeeLoadDlls ();
 | 
						|
 | 
						|
  // set name of current library opened with dlopen
 | 
						|
  void currentDlOpenedLib (const char*);
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
class DllListIterator
 | 
						|
{
 | 
						|
  int _type;
 | 
						|
  int _index;
 | 
						|
 | 
						|
protected:
 | 
						|
  DllListIterator (int type);
 | 
						|
  int index () const { return _index; }
 | 
						|
 | 
						|
public:
 | 
						|
  virtual ~DllListIterator();
 | 
						|
 | 
						|
  int ok() { return _index!=-1; }
 | 
						|
  void operator++ ();
 | 
						|
  void operator++ (int) { operator++ (); }
 | 
						|
  operator per_process* ();
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
class LinkedDllIterator : public DllListIterator
 | 
						|
{
 | 
						|
public:
 | 
						|
  LinkedDllIterator ();
 | 
						|
  ~LinkedDllIterator ();
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
class LoadedDllIterator : public DllListIterator
 | 
						|
{
 | 
						|
public:
 | 
						|
  LoadedDllIterator ();
 | 
						|
  ~LoadedDllIterator ();
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
#define DO_LINKED_DLL(var)						      \
 | 
						|
{									      \
 | 
						|
LinkedDllIterator iterator;						      \
 | 
						|
while (iterator.ok ())							      \
 | 
						|
{									      \
 | 
						|
  per_process *var = (per_process *) iterator;
 | 
						|
 | 
						|
#define DO_LOADED_DLL(var)						      \
 | 
						|
{									      \
 | 
						|
LoadedDllIterator iterator;						      \
 | 
						|
while (iterator.ok ())							      \
 | 
						|
{									      \
 | 
						|
  per_process *var = (per_process *) iterator;
 | 
						|
 | 
						|
#define DLL_DONE							      \
 | 
						|
  iterator++;								      \
 | 
						|
}									      \
 | 
						|
}
 | 
						|
 |