5 * ReactOS MSVCRT.DLL Compatibility Library
7 * THIS SOFTWARE IS NOT COPYRIGHTED
9 * This source code is offered for use in the public domain. You may
10 * use, modify or distribute it freely.
12 * This code is distributed in the hope that it will be useful but
13 * WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY
14 * DISCLAMED. This includes but is not limited to warrenties of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25 #include <internal/tls.h>
27 #include <internal/wine/msvcrt.h>
30 #include <internal/msvcrtdbg.h>
33 /* EXTERNAL PROTOTYPES ********************************************************/
35 //void __fileno_init(void);
36 extern BOOL
__fileno_init(void);
37 extern int BlockEnvToEnvironA(void);
38 extern int BlockEnvToEnvironW(void);
39 extern void FreeEnvironment(char **environment
);
41 extern unsigned int _osver
;
42 extern unsigned int _winminor
;
43 extern unsigned int _winmajor
;
44 extern unsigned int _winver
;
46 extern char* _acmdln
; /* pointer to ascii command line */
47 extern wchar_t* _wcmdln
; /* pointer to wide character command line */
49 extern char** _environ
; /* pointer to environment block */
50 extern char** __initenv
; /* pointer to initial environment block */
51 extern wchar_t** _wenviron
; /* pointer to environment block */
52 extern wchar_t** __winitenv
; /* pointer to initial environment block */
55 /* LIBRARY GLOBAL VARIABLES ***************************************************/
57 HANDLE hHeap
= NULL
; /* handle for heap */
60 /* LIBRARY ENTRY POINT ********************************************************/
64 DllMain(PVOID hinstDll
, ULONG dwReason
, PVOID reserved
)
68 case DLL_PROCESS_ATTACH
://1
69 /* initialize version info */
70 //DPRINT1("Process Attach %d\n", nAttachCount);
71 //DPRINT1("Process Attach\n");
72 _osver
= GetVersion();
73 _winmajor
= (_osver
>> 8) & 0xFF;
74 _winminor
= _osver
& 0xFF;
75 _winver
= (_winmajor
<< 8) + _winminor
;
76 _osver
= (_osver
>> 16) & 0xFFFF;
77 hHeap
= HeapCreate(0, 100000, 0);
83 /* create tls stuff */
84 if (!CreateThreadData())
87 if (BlockEnvToEnvironA() < 0)
90 if (BlockEnvToEnvironW() < 0)
92 FreeEnvironment((char**)_wenviron
);
96 _acmdln
= _strdup(GetCommandLineA());
97 _wcmdln
= _wcsdup(GetCommandLineW());
99 /* FIXME: more initializations... */
101 /* FIXME: Initialization of the WINE code */
102 msvcrt_init_mt_locks();
104 DPRINT("Attach done\n");
107 case DLL_THREAD_ATTACH
://2
110 case DLL_THREAD_DETACH
://4
111 FreeThreadData(NULL
);
114 case DLL_PROCESS_DETACH
://0
115 //DPRINT1("Detach %d\n", nAttachCount);
116 //DPRINT("Detach\n");
117 /* FIXME: more cleanup... */
120 /* destroy tls stuff */
123 if (__winitenv
&& __winitenv
!= _wenviron
)
124 FreeEnvironment((char**)__winitenv
);
126 FreeEnvironment((char**)_wenviron
);
128 if (__initenv
&& __initenv
!= _environ
)
129 FreeEnvironment(__initenv
);
131 FreeEnvironment(_environ
);
136 DPRINT("Detach done\n");