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.
24 #include <msvcrt/internal/tls.h>
25 #include <msvcrt/stdlib.h>
26 #include <msvcrt/wine/msvcrt.h>
29 #include <msvcrt/msvcrtdbg.h>
32 /* EXTERNAL PROTOTYPES ********************************************************/
34 //void __fileno_init(void);
35 extern BOOL
__fileno_init(void);
36 extern int BlockEnvToEnvironA(void);
37 extern int BlockEnvToEnvironW(void);
38 extern void FreeEnvironment(char **environment
);
40 extern unsigned int _osver
;
41 extern unsigned int _winminor
;
42 extern unsigned int _winmajor
;
43 extern unsigned int _winver
;
45 extern char* _acmdln
; /* pointer to ascii command line */
46 extern wchar_t* _wcmdln
; /* pointer to wide character command line */
48 extern char** _environ
; /* pointer to environment block */
49 extern char** __initenv
; /* pointer to initial environment block */
50 extern wchar_t** _wenviron
; /* pointer to environment block */
51 extern wchar_t** __winitenv
; /* pointer to initial environment block */
54 /* LIBRARY GLOBAL VARIABLES ***************************************************/
56 HANDLE hHeap
= NULL
; /* handle for heap */
59 /* LIBRARY ENTRY POINT ********************************************************/
63 DllMain(PVOID hinstDll
, ULONG dwReason
, PVOID reserved
)
67 case DLL_PROCESS_ATTACH
://1
68 /* initialize version info */
69 DPRINT("Attach %d\n", nAttachCount
);
70 _osver
= GetVersion();
71 _winmajor
= (_osver
>> 8) & 0xFF;
72 _winminor
= _osver
& 0xFF;
73 _winver
= (_winmajor
<< 8) + _winminor
;
74 _osver
= (_osver
>> 16) & 0xFFFF;
75 hHeap
= HeapCreate(0, 100000, 0);
81 /* create tls stuff */
82 if (!CreateThreadData())
85 if (BlockEnvToEnvironA() < 0)
88 if (BlockEnvToEnvironW() < 0)
90 FreeEnvironment((char**)_wenviron
);
94 _acmdln
= _strdup(GetCommandLineA());
95 _wcmdln
= _wcsdup(GetCommandLineW());
97 /* FIXME: more initializations... */
99 /* FIXME: Initialization of the WINE code */
100 msvcrt_init_mt_locks();
102 DPRINT("Attach done\n");
105 case DLL_THREAD_ATTACH
://2
108 case DLL_THREAD_DETACH
://4
109 FreeThreadData(NULL
);
112 case DLL_PROCESS_DETACH
://0
113 DPRINT("Detach %d\n", nAttachCount
);
114 /* FIXME: more cleanup... */
117 /* destroy tls stuff */
120 if (__winitenv
&& __winitenv
!= _wenviron
)
121 FreeEnvironment((char**)__winitenv
);
123 FreeEnvironment((char**)_wenviron
);
125 if (__initenv
&& __initenv
!= _environ
)
126 FreeEnvironment(__initenv
);
128 FreeEnvironment(_environ
);
133 DPRINT("Detach done\n");