ReactOS 0.4.16-dev-2104-gb84fa49
main.c File Reference
#include <locale.h>
#include "msvcrt.h"
#include "winternl.h"
#include "wine/debug.h"
Include dependency graph for main.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msvcrt)
 
static const charmsvcrt_get_reason (DWORD reason)
 
static BOOL msvcrt_init_tls (void)
 
static BOOL msvcrt_free_tls (void)
 
static void msvcrt_free_tls_mem (void)
 
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 

Variables

DWORD msvcrt_tls_index
 

Function Documentation

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinstDLL,
DWORD  fdwReason,
LPVOID  lpvReserved 
)

Definition at line 90 of file main.c.

91{
92 TRACE("(%p, %s, %p) pid(%lx), tid(%lx), tls(%lu)\n",
96
97 switch (fdwReason)
98 {
100 msvcrt_init_exception(hinstDLL);
101 if(!msvcrt_init_heap())
102 return FALSE;
103 if(!msvcrt_init_tls()) {
105 return FALSE;
106 }
108 if(!msvcrt_init_locale()) {
112 return FALSE;
113 }
114#if defined(__x86_64__) && _MSVCR_VER>=140
115 if(!msvcrt_init_handler4()) {
120 return FALSE;
121 }
122#endif
123 msvcrt_init_math(hinstDLL);
127#if _MSVCR_VER >= 100 && _MSVCR_VER <= 120
128 msvcrt_init_concurrency(hinstDLL);
129#endif
130#if _MSVCR_VER == 0
131 /* don't allow unloading msvcrt, we can't setup file handles twice */
132 LdrAddRefDll( LDR_ADDREF_DLL_PIN, hinstDLL );
133#elif _MSVCR_VER >= 80
135#endif
137 TRACE("finished process init\n");
138 break;
140#if defined(__x86_64__) && _MSVCR_VER>=140
141 msvcrt_attach_handler4();
142#endif
143 break;
146 if (lpvReserved) break;
153 if (!msvcrt_free_tls())
154 return FALSE;
155#if defined(__x86_64__) && _MSVCR_VER>=140
156 msvcrt_free_handler4();
157#endif
159#if _MSVCR_VER >= 100 && _MSVCR_VER <= 120
160 msvcrt_free_scheduler_thread();
161 msvcrt_free_concurrency();
162#endif
164 TRACE("finished process free\n");
165 break;
168#if _MSVCR_VER >= 100 && _MSVCR_VER <= 120
169 msvcrt_free_scheduler_thread();
170#endif
171 TRACE("finished thread free\n");
172 break;
173 }
174 return TRUE;
175}
static DWORD const fdwReason
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DLL_THREAD_DETACH
Definition: compat.h:133
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define DLL_THREAD_ATTACH
Definition: compat.h:132
void msvcrt_free_console(void)
Definition: console.c:68
void msvcrt_free_args(void)
Definition: data.c:462
void msvcrt_init_args(void)
Definition: data.c:404
void msvcrt_free_signals(void)
Definition: except.c:640
void msvcrt_init_signals(void)
Definition: except.c:635
void msvcrt_init_io(void)
Definition: file.c:720
void msvcrt_free_io(void)
Definition: file.c:1392
BOOL msvcrt_init_heap(void)
Definition: heap.c:830
void msvcrt_destroy_heap(void)
Definition: heap.c:840
_ACRTIMP void __cdecl _free_locale(_locale_t)
Definition: locale.c:1183
_ACRTIMP int __cdecl _set_printf_count_output(int)
Definition: stubs.c:10
BOOL msvcrt_init_locale(void)
Definition: locale.c:2151
void msvcrt_init_mt_locks(void)
Definition: lock.c:66
void msvcrt_free_locks(void)
Definition: lock.c:149
static void msvcrt_free_tls_mem(void)
Definition: main.c:65
static const char * msvcrt_get_reason(DWORD reason)
Definition: main.c:31
DWORD msvcrt_tls_index
Definition: main.c:29
static BOOL msvcrt_init_tls(void)
Definition: main.c:43
static BOOL msvcrt_free_tls(void)
Definition: main.c:55
void msvcrt_init_exception(void *)
void msvcrt_free_popen_data(void)
Definition: process.c:1034
void msvcrt_init_clock(void)
Definition: time.c:49
NTSTATUS NTAPI LdrAddRefDll(_In_ ULONG Flags, _In_ PVOID BaseAddress)
Definition: ldrapi.c:1205
#define LDR_ADDREF_DLL_PIN
Definition: ldrtypes.h:75
static IN DWORD IN LPVOID lpvReserved
void msvcrt_init_math(void)
#define MSVCRT_locale
Definition: locale.h:80
#define TRACE(s)
Definition: solgame.cpp:4
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1158

◆ msvcrt_free_tls()

static BOOL msvcrt_free_tls ( void  )
inlinestatic

Definition at line 55 of file main.c.

56{
58 {
59 ERR("TlsFree() failed!\n");
60 return FALSE;
61 }
62 return TRUE;
63}
#define ERR(fmt,...)
Definition: precomp.h:57
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166

Referenced by DllMain().

◆ msvcrt_free_tls_mem()

static void msvcrt_free_tls_mem ( void  )
inlinestatic

Definition at line 65 of file main.c.

66{
68
69 if (tls)
70 {
71 free(tls->efcvt_buffer);
72 free(tls->asctime_buffer);
73 free(tls->wasctime_buffer);
74 free(tls->strerror_buffer);
75 free(tls->wcserror_buffer);
76 free(tls->time_buffer);
77 free(tls->tmpnam_buffer);
78 free(tls->wtmpnam_buffer);
79 if(tls->locale_flags & LOCALE_FREE) {
80 free_locinfo(tls->locinfo);
81 free_mbcinfo(tls->mbcinfo);
82 }
83 }
85}
#define free
Definition: debug_ros.c:5
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
void free_mbcinfo(pthreadmbcinfo mbcinfo)
Definition: locale.c:1138
void free_locinfo(pthreadlocinfo locinfo)
Definition: locale.c:1061
#define LOCALE_FREE
Definition: msvcrt.h:172
static DWORD tls
Definition: sock.c:229

Referenced by DllMain().

◆ msvcrt_get_reason()

static const char * msvcrt_get_reason ( DWORD  reason)
static

Definition at line 31 of file main.c.

32{
33 switch (reason)
34 {
35 case DLL_PROCESS_ATTACH: return "DLL_PROCESS_ATTACH";
36 case DLL_PROCESS_DETACH: return "DLL_PROCESS_DETACH";
37 case DLL_THREAD_ATTACH: return "DLL_THREAD_ATTACH";
38 case DLL_THREAD_DETACH: return "DLL_THREAD_DETACH";
39 }
40 return "UNKNOWN";
41}
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904

Referenced by DllMain().

◆ msvcrt_init_tls()

static BOOL msvcrt_init_tls ( void  )
inlinestatic

Definition at line 43 of file main.c.

44{
46
48 {
49 ERR("TlsAlloc() failed!\n");
50 return FALSE;
51 }
52 return TRUE;
53}
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:529

Referenced by crt_process_init(), and DllMain().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msvcrt  )

Variable Documentation

◆ msvcrt_tls_index