diff options
Diffstat (limited to 'winsup/cygwin/dll_init.h')
-rw-r--r-- | winsup/cygwin/dll_init.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/winsup/cygwin/dll_init.h b/winsup/cygwin/dll_init.h new file mode 100644 index 0000000..ca2cc2c --- /dev/null +++ b/winsup/cygwin/dll_init.h @@ -0,0 +1,102 @@ +/* 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++; \ +} \ +} + |