Index: third_party/minicrt/initterm.cc |
diff --git a/third_party/minicrt/initterm.cc b/third_party/minicrt/initterm.cc |
deleted file mode 100644 |
index 9cb22507efce1ae5bbc5a4a5311125feba6b1946..0000000000000000000000000000000000000000 |
--- a/third_party/minicrt/initterm.cc |
+++ /dev/null |
@@ -1,230 +0,0 @@ |
-//========================================== |
-// LIBCTINY - Matt Pietrek 2001 |
-// MSDN Magazine, January 2001 |
-// ========================================== |
- |
-#include "libctiny.h" |
-#include <windows.h> |
-#include <malloc.h> |
-#include "initterm.h" |
- |
-#pragma data_seg(".CRT$XCA") |
-_PVFV __xc_a[] = { NULL }; |
-#pragma data_seg(".CRT$XCZ") |
-_PVFV __xc_z[] = { NULL }; |
- |
-/* |
-#pragma data_seg(".CRT$XIA") |
-_PVFV __xi_a[] = { NULL }; |
-#pragma data_seg(".CRT$XIZ") |
-_PVFV __xi_z[] = { NULL }; |
- |
-#pragma data_seg(".CRT$XTA") |
-_PVFV __xt_a[] = { NULL }; |
-#pragma data_seg(".CRT$XTZ") |
-_PVFV __xt_z[] = { NULL }; |
- |
-#pragma data_seg(".CRT$XPA") |
-_PVFV __xp_a[] = { NULL }; |
-#pragma data_seg(".CRT$XPZ") |
-_PVFV __xp_z[] = { NULL }; |
-*/ |
- |
-#pragma data_seg() /* reset */ |
- |
-#pragma comment(linker, "/merge:.CRT=.data") |
- |
-typedef void (__cdecl *_PVFV)(); |
- |
-void __cdecl _initterm( |
- _PVFV * pfbegin, |
- _PVFV * pfend |
- ) { |
- // walk the table of function pointers from the bottom up, until |
- // the end is encountered. Do not skip the first entry. The initial |
- // value of pfbegin points to the first valid entry. Do not try to |
- // execute what pfend points to. Only entries before pfend are valid. |
- while (pfbegin < pfend) |
- { |
- // if current table entry is non-NULL, call thru it. |
- if (*pfbegin != NULL) |
- (**pfbegin)(); |
- ++pfbegin; |
- } |
-} |
- |
-static _PVFV * pf_atexitlist = 0; |
-static unsigned max_atexitlist_entries = 0; |
-static unsigned cur_atexitlist_entries = 0; |
- |
-void __cdecl _atexit_init() { |
- max_atexitlist_entries = 32; |
- pf_atexitlist = (_PVFV *)calloc( max_atexitlist_entries, |
- sizeof(_PVFV*) ); |
-} |
- |
-int __cdecl atexit(_PVFV func ) { |
- if (cur_atexitlist_entries < max_atexitlist_entries) |
- { |
- pf_atexitlist[cur_atexitlist_entries++] = func; |
- return 0; |
- } |
- |
- return -1; |
-} |
- |
-void __cdecl _DoExit() { |
- if (cur_atexitlist_entries) |
- { |
- _initterm( pf_atexitlist, |
- // Use ptr math to find the end of the array |
- pf_atexitlist + cur_atexitlist_entries ); |
- } |
-} |
- |
-// ----------------------------------------------------- |
- |
-/* |
-static HANDLE g_hProcessHeap = NULL; |
- |
-extern "C" _PVFV* __onexitbegin = NULL; |
-extern "C" _PVFV* __onexitend = NULL; |
- |
-extern "C" _PVFV __xi_a[], __xi_z[]; // C initializers |
-extern "C" _PVFV __xc_a[], __xc_z[]; // C++ initializers |
-extern "C" _PVFV __xp_a[], __xp_z[]; // C pre-terminators |
-extern "C" _PVFV __xt_a[], __xt_z[]; // C terminators |
- |
-// Critical section to protect initialization/exit code |
-static CRITICAL_SECTION g_csInit; |
- |
-extern "C" void DoInitialization() { |
- _PVFV* pf; |
- |
- // memset(&osi, 0, sizeof(OSVERSIONINFO)); |
- // osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
- // GetVersionEx(&osi); |
- // _osplatform = osi.dwPlatformId; |
- |
- InitializeCriticalSection( &g_csInit ); |
- |
- EnterCriticalSection( &g_csInit ); |
- |
- __try |
- { |
- g_hProcessHeap = GetProcessHeap(); |
- |
- // Call initialization routines (contructors for globals, etc.) |
- for (pf = __xi_a; pf < __xi_z; pf++) |
- { |
- if (*pf != NULL) |
- { |
- (**pf)(); |
- } |
- } |
- |
- for (pf = __xc_a; pf < __xc_z; pf++) |
- { |
- if (*pf != NULL) |
- { |
- (**pf)(); |
- } |
- } |
- } |
- __finally |
- { |
- LeaveCriticalSection(&g_csInit); |
- } |
-} |
- |
-extern "C" void DoCleanup() { |
- _PVFV* pf; |
- |
- EnterCriticalSection(&g_csInit); // Protect access to the atexit table |
- |
- __try |
- { |
- // Call routines registered with atexit() from most recently registered |
- // to least recently registered |
- if (__onexitbegin != NULL) |
- { |
- for (pf = __onexitend-1; pf >= __onexitbegin; pf--) |
- { |
- if (*pf != NULL) |
- (**pf)(); |
- } |
- } |
- |
- free(__onexitbegin); |
- __onexitbegin = NULL; |
- __onexitend = NULL; |
- |
- for (pf = __xp_a; pf < __xp_z; pf++) |
- { |
- if (*pf != NULL) |
- { |
- (**pf)(); |
- } |
- } |
- |
- for (pf = __xt_a; pf < __xt_z; pf++) |
- { |
- if (*pf != NULL) |
- { |
- (**pf)(); |
- } |
- } |
- } |
- __finally |
- { |
- LeaveCriticalSection(&g_csInit); |
- DeleteCriticalSection(&g_csInit); |
- } |
-} |
- |
-int __cdecl atexit(_PVFV pf) { |
- size_t nCurrentSize; |
- int nRet = 0; |
- |
- EnterCriticalSection(&g_csInit); |
- |
- __try |
- { |
- if (__onexitbegin == NULL) |
- { |
- __onexitbegin = (_PVFV*)malloc(16*sizeof(_PVFV)); |
- if (__onexitbegin == NULL) |
- { |
- LeaveCriticalSection(&g_csInit); |
- return(-1); |
- } |
- __onexitend = __onexitbegin; |
- } |
- |
- nCurrentSize = _msize(__onexitbegin); |
- if ((nCurrentSize+sizeof(_PVFV)) < ULONG(((const byte*)__onexitend- |
- (const byte*)__onexitbegin))) |
- { |
- _PVFV* pNew; |
- |
- pNew = (_PVFV*)realloc(__onexitbegin, 2*nCurrentSize); |
- if (pNew == NULL) |
- { |
- LeaveCriticalSection(&g_csInit); |
- return(-1); |
- } |
- } |
- |
- *__onexitend = pf; |
- __onexitend++; |
- } |
- __except (1) |
- { |
- nRet = -1; |
- } |
- |
- LeaveCriticalSection(&g_csInit); |
- |
- return(nRet); |
-} |
-*/ |