1 /* 2 * dllmain.c 3 * 4 * ReactOS MSVCRT.DLL Compatibility Library 5 * 6 * THIS SOFTWARE IS NOT COPYRIGHTED 7 * 8 * This source code is offered for use in the public domain. You may 9 * use, modify or distribute it freely. 10 * 11 * This code is distributed in the hope that it will be useful but 12 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 13 * DISCLAMED. This includes but is not limited to warranties of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 15 * 16 */ 17 18 #include "precomp.h" 19 20 WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); 21 22 /* EXTERNAL PROTOTYPES ********************************************************/ 23 24 BOOL crt_process_init(void); 25 26 extern void FreeEnvironment(char **environment); 27 28 #undef _environ 29 extern char** _environ; /* pointer to environment block */ 30 extern char** __initenv; /* pointer to initial environment block */ 31 extern wchar_t** _wenviron; /* pointer to environment block */ 32 extern wchar_t** __winitenv; /* pointer to initial environment block */ 33 extern void msvcrt_init_exception(void*) DECLSPEC_HIDDEN; 34 35 /* LIBRARY ENTRY POINT ********************************************************/ 36 37 BOOL 38 WINAPI 39 DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved) 40 { 41 switch (dwReason) 42 { 43 case DLL_PROCESS_ATTACH: 44 45 TRACE("Process Attach\n"); 46 47 msvcrt_init_exception(hinstDll); 48 49 if (!crt_process_init()) 50 { 51 ERR("crt_init() failed!\n"); 52 return FALSE; 53 } 54 55 TRACE("Attach done\n"); 56 break; 57 58 case DLL_THREAD_ATTACH: 59 //msvcrt_get_thread_data creates data when first called 60 break; 61 62 case DLL_THREAD_DETACH: 63 msvcrt_free_tls_mem(); 64 break; 65 66 case DLL_PROCESS_DETACH: 67 TRACE("Detach\n"); 68 /* Deinit of the WINE code */ 69 msvcrt_free_io(); 70 if (reserved) break; 71 msvcrt_free_popen_data(); 72 msvcrt_free_mt_locks(); 73 //msvcrt_free_console(); 74 //msvcrt_free_args(); 75 //msvcrt_free_signals(); 76 msvcrt_free_tls_mem(); 77 if (!msvcrt_free_tls()) 78 return FALSE; 79 if(global_locale) 80 MSVCRT__free_locale(global_locale); 81 82 if (__winitenv && __winitenv != _wenviron) 83 FreeEnvironment((char**)__winitenv); 84 if (_wenviron) 85 FreeEnvironment((char**)_wenviron); 86 87 if (__initenv && __initenv != _environ) 88 FreeEnvironment(__initenv); 89 if (_environ) 90 FreeEnvironment(_environ); 91 92 TRACE("Detach done\n"); 93 break; 94 } 95 96 return TRUE; 97 } 98 99 /* FIXME: This hack is required to prevent the VC linker from linking these 100 exports to the functions from libntdll. See CORE-10753 */ 101 #ifdef _MSC_VER 102 #ifdef _M_IX86 103 #pragma comment(linker, "/include:__vsnprintf") 104 #pragma comment(linker, "/include:_bsearch") 105 #pragma comment(linker, "/include:_strcspn") 106 #else 107 #pragma comment(linker, "/include:_vsnprintf") 108 #pragma comment(linker, "/include:bsearch") 109 #pragma comment(linker, "/include:strcspn") 110 #endif // _M_IX86 111 #endif // _MSC_VER 112 113 /* EOF */ 114