ReactOS 0.4.15-dev-8222-g9164419
msvcrt40.c File Reference
#include <stdarg.h>
#include <internal/tls.h>
#include <internal/wine/msvcrt.h>
#include <internal/locale.h>
#include <wine/debug.h>
Include dependency graph for msvcrt40.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _CRT_PRECOMP_H
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msvcrt)
 
int BlockEnvToEnvironA (void)
 
int BlockEnvToEnvironW (void)
 
void FreeEnvironment (char **environment)
 
BOOL msvcrt_init_heap (void)
 
BOOL WINAPI DllMain (PVOID hinstDll, ULONG dwReason, PVOID reserved)
 

Variables

unsigned int _osplatform
 
unsigned int _osver
 
unsigned int _winminor
 
unsigned int _winmajor
 
unsigned int _winver
 
char_acmdln
 
wchar_t_wcmdln
 
char ** _environ
 
char ** __initenv
 
wchar_t ** _wenviron
 
wchar_t ** __winitenv
 

Macro Definition Documentation

◆ _CRT_PRECOMP_H

#define _CRT_PRECOMP_H

Definition at line 25 of file msvcrt40.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 21 of file msvcrt40.c.

Function Documentation

◆ BlockEnvToEnvironA()

int BlockEnvToEnvironA ( void  )

Definition at line 34 of file environ.c.

35{
36 char *ptr, *environment_strings;
37 char **envptr;
38 int count = 1;
39 size_t len;
40
41 TRACE("BlockEnvToEnvironA()\n");
42
43 environment_strings = GetEnvironmentStringsA();
44 if (environment_strings == NULL) {
45 return -1;
46 }
47
48 for (ptr = environment_strings; *ptr; ptr += len)
49 {
50 len = strlen(ptr) + 1;
51 /* Skip drive letter settings. */
52 if (*ptr != '=')
53 count++;
54 }
55
56 __initenv = _environ = malloc(count * sizeof(char*));
57 if (_environ)
58 {
59 for (ptr = environment_strings, envptr = _environ; count > 1; ptr += len)
60 {
61 len = strlen(ptr) + 1;
62 /* Skip drive letter settings. */
63 if (*ptr != '=')
64 {
65 if ((*envptr = malloc(len)) == NULL)
66 {
67 for (envptr--; envptr >= _environ; envptr--)
68 free(*envptr);
69 FreeEnvironmentStringsA(environment_strings);
72 return -1;
73 }
74 memcpy(*envptr++, ptr, len);
75 count--;
76 }
77 }
78 /* Add terminating NULL entry. */
79 *envptr = NULL;
80 }
81
82 FreeEnvironmentStringsA(environment_strings);
83 return _environ ? 0 : -1;
84}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
BOOL WINAPI FreeEnvironmentStringsA(IN LPSTR EnvironmentStrings)
Definition: environ.c:379
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum GLsizei len
Definition: glext.h:6722
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
char ** __initenv
Definition: environ.c:24
char ** _environ
Definition: environ.c:22
#define TRACE(s)
Definition: solgame.cpp:4
#define GetEnvironmentStringsA
Definition: winbase.h:3813

Referenced by DllMain().

◆ BlockEnvToEnvironW()

int BlockEnvToEnvironW ( void  )

Definition at line 86 of file environ.c.

87{
88 wchar_t *ptr, *environment_strings;
89 wchar_t **envptr;
90 int count = 1;
91 size_t len;
92
93 TRACE("BlockEnvToEnvironW()\n");
94
95 environment_strings = GetEnvironmentStringsW();
96 if (environment_strings == NULL) {
97 return -1;
98 }
99
100 for (ptr = environment_strings; *ptr; ptr += len)
101 {
102 len = wcslen(ptr) + 1;
103 /* Skip drive letter settings. */
104 if (*ptr != '=')
105 count++;
106 }
107
108 __winitenv = _wenviron = malloc(count * sizeof(wchar_t*));
109 if (_wenviron)
110 {
111 for (ptr = environment_strings, envptr = _wenviron; count > 1; ptr += len)
112 {
113 len = wcslen(ptr) + 1;
114 /* Skip drive letter settings. */
115 if (*ptr != '=')
116 {
117 if ((*envptr = malloc(len * sizeof(wchar_t))) == NULL)
118 {
119 for (envptr--; envptr >= _wenviron; envptr--)
120 free(*envptr);
121 FreeEnvironmentStringsW(environment_strings);
124 return -1;
125 }
126 memcpy(*envptr++, ptr, len * sizeof(wchar_t));
127 count--;
128 }
129 }
130 /* Add terminating NULL entry. */
131 *envptr = NULL;
132 }
133
134 FreeEnvironmentStringsW(environment_strings);
135 return _wenviron ? 0 : -1;
136}
BOOL WINAPI FreeEnvironmentStringsW(IN LPWSTR EnvironmentStrings)
Definition: environ.c:389
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
wchar_t ** __winitenv
Definition: environ.c:25
wchar_t ** _wenviron
Definition: environ.c:23
LPWSTR WINAPI GetEnvironmentStringsW(void)
Definition: environ.c:344

Referenced by DllMain().

◆ DllMain()

BOOL WINAPI DllMain ( PVOID  hinstDll,
ULONG  dwReason,
PVOID  reserved 
)

Definition at line 63 of file msvcrt40.c.

64{
66 switch (dwReason)
67 {
69 /* initialize version info */
70 TRACE("Process Attach\n");
78
79 /* create tls stuff */
81 return FALSE;
82
83 if (!msvcrt_init_heap())
84 return FALSE;
85
86 if (BlockEnvToEnvironA() < 0)
87 return FALSE;
88
89 if (BlockEnvToEnvironW() < 0)
90 {
92 return FALSE;
93 }
94
97
98 /* Initialization of the WINE code */
100 //msvcrt_init_math();
102 //msvcrt_init_console();
103 //msvcrt_init_args();
104 //msvcrt_init_signals();
105 TRACE("Attach done\n");
106 break;
107
109 //msvcrt_get_thread_data creates data when first called
110 break;
111
114 break;
115
117 TRACE("Detach\n");
118 /* Deinit of the WINE code */
120 if (reserved) break;
123 //msvcrt_free_console();
124 //msvcrt_free_args();
125 //msvcrt_free_signals();
127 if (!msvcrt_free_tls())
128 return FALSE;
129 if(global_locale)
131
134 if (_wenviron)
135 FreeEnvironment((char**)_wenviron);
136
137 if (__initenv && __initenv != _environ)
139 if (_environ)
141
142 TRACE("Detach done\n");
143 break;
144 }
145
146 return TRUE;
147}
DWORD dwReason
Definition: misc.cpp:154
#define _strdup
Definition: debug_ros.c:7
#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
LPSTR WINAPI GetCommandLineA(VOID)
Definition: proc.c:2003
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2013
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
r reserved
Definition: btrfs.c:3006
MSVCRT__locale_t global_locale
Definition: locale.c:1495
if(dx< 0)
Definition: linetemp.h:194
void msvcrt_init_io(void)
Definition: file.c:456
void msvcrt_init_mt_locks(void)
Definition: lock.c:54
void __cdecl MSVCRT__free_locale(MSVCRT__locale_t)
Definition: locale.c:711
void msvcrt_free_mt_locks(void)
Definition: lock.c:77
void msvcrt_free_io(void)
Definition: file.c:1100
char * _acmdln
Definition: environ.c:18
int BlockEnvToEnvironA(void)
Definition: environ.c:34
void FreeEnvironment(char **environment)
Definition: environ.c:190
unsigned int _winminor
Definition: environ.c:12
unsigned int _winmajor
Definition: environ.c:13
BOOL msvcrt_init_heap(void)
Definition: heap.c:895
char ** __initenv
Definition: environ.c:24
wchar_t ** __winitenv
Definition: environ.c:25
wchar_t ** _wenviron
Definition: environ.c:23
wchar_t * _wcmdln
Definition: environ.c:19
int BlockEnvToEnvironW(void)
Definition: environ.c:86
unsigned int _osver
Definition: environ.c:11
unsigned int _osplatform
Definition: environ.c:10
unsigned int _winver
Definition: environ.c:14
char ** _environ
Definition: environ.c:22
_Check_return_ _CRTIMP wchar_t *__cdecl _wcsdup(_In_z_ const wchar_t *_Str)
void msvcrt_free_tls_mem(void)
Definition: tls.c:51
BOOL msvcrt_free_tls(void)
Definition: tls.c:21
BOOL msvcrt_init_tls(void)
Definition: tls.c:9
void msvcrt_free_popen_data(void)
Definition: popen.c:29
ULONG dwPlatformId
Definition: rtltypes.h:241
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:237
ULONG dwMajorVersion
Definition: rtltypes.h:238
ULONG dwBuildNumber
Definition: rtltypes.h:240
ULONG dwMinorVersion
Definition: rtltypes.h:239
OSVERSIONINFO osvi
Definition: ver.c:28
struct _OSVERSIONINFOW OSVERSIONINFOW

◆ FreeEnvironment()

void FreeEnvironment ( char **  environment)

Internal function to deallocate environment block. Although it's parameter are defined as char**, it's able to work also with wide character environment block which are of type wchar_t**.

Parameters
environmentEnvironment to free.

Definition at line 190 of file environ.c.

191{
192 char **envptr;
193 for (envptr = environment; *envptr != NULL; envptr++)
194 free(*envptr);
195 free(environment);
196}

Referenced by DllMain().

◆ msvcrt_init_heap()

BOOL msvcrt_init_heap ( void  )

Definition at line 895 of file heap.c.

896{
897#ifdef __REACTOS__
899#else
900 heap = HeapCreate(0, 0, 0);
901#endif
902 return heap != NULL;
903}
#define GetProcessHeap()
Definition: compat.h:736
HANDLE WINAPI HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)
Definition: heapmem.c:45
static HANDLE heap
Definition: heap.c:65

Referenced by DllMain().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msvcrt  )

Variable Documentation

◆ __initenv

char** __initenv
extern

Definition at line 24 of file environ.c.

Referenced by DllMain().

◆ __winitenv

wchar_t** __winitenv
extern

Definition at line 25 of file environ.c.

Referenced by DllMain().

◆ _acmdln

char* _acmdln
extern

Definition at line 18 of file environ.c.

Referenced by DllMain().

◆ _environ

char** _environ
extern

Definition at line 22 of file environ.c.

Referenced by DllMain().

◆ _osplatform

unsigned int _osplatform
extern

Definition at line 10 of file environ.c.

Referenced by DllMain().

◆ _osver

unsigned int _osver
extern

Definition at line 11 of file environ.c.

Referenced by DllMain().

◆ _wcmdln

wchar_t* _wcmdln
extern

Definition at line 19 of file environ.c.

Referenced by DllMain().

◆ _wenviron

wchar_t** _wenviron
extern

Definition at line 23 of file environ.c.

Referenced by DllMain().

◆ _winmajor

unsigned int _winmajor
extern

Definition at line 13 of file environ.c.

Referenced by DllMain().

◆ _winminor

unsigned int _winminor
extern

Definition at line 12 of file environ.c.

Referenced by DllMain().

◆ _winver

unsigned int _winver
extern

Definition at line 14 of file environ.c.

Referenced by DllMain().