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++; \
|
||
|
} \
|
||
|
}
|
||
|
|