/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #undef CRTDLL #ifndef _DLL #define _DLL #endif #include #include #include #include #include //#include #define _EXIT_LOCK1 8 void __cdecl _lock (int _File); void __cdecl _unlock (int _File); _PVFV *__onexitbegin; _PVFV *__onexitend; extern _CRTIMP _onexit_t __cdecl __dllonexit (_onexit_t, _PVFV**, _PVFV**); extern _onexit_t (__cdecl * __MINGW_IMP_SYMBOL(_onexit)) (_onexit_t func); /* Choose a different name to prevent name conflicts. The CRT one works fine. */ _onexit_t __cdecl mingw_onexit(_onexit_t func); _onexit_t __cdecl mingw_onexit(_onexit_t func) { _PVFV *onexitbegin; _PVFV *onexitend; _onexit_t retval; onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); if (onexitbegin == (_PVFV *) -1) return (* __MINGW_IMP_SYMBOL(_onexit)) (func); _lock (_EXIT_LOCK1); onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); onexitend = (_PVFV *) _decode_pointer (__onexitend); retval = __dllonexit (func, &onexitbegin, &onexitend); __onexitbegin = (_PVFV *) _encode_pointer (onexitbegin); __onexitend = (_PVFV *) _encode_pointer (onexitend); _unlock (_EXIT_LOCK1); return retval; } int __cdecl atexit (_PVFV func) { return (mingw_onexit((_onexit_t)func) == NULL) ? -1 : 0; }