/* EXTERNAL PROTOTYPES ********************************************************/
-extern int BlockEnvToEnvironA(void);
-extern int BlockEnvToEnvironW(void);
+BOOL crt_process_init(void);
+
extern void FreeEnvironment(char **environment);
-extern unsigned int _osver;
-extern unsigned int _winminor;
-extern unsigned int _winmajor;
-extern unsigned int _winver;
unsigned int CRTDLL__basemajor_dll = 0;
unsigned int CRTDLL__baseminor_dll = 0;
unsigned int CRTDLL__osversion_dll = 0;
int _fileinfo_dll;
-extern char* _acmdln; /* pointer to ascii command line */
-extern wchar_t* _wcmdln; /* pointer to wide character command line */
#undef _environ
extern char** _environ; /* pointer to environment block */
extern char** __initenv; /* pointer to initial environment block */
CRTDLL__osmode_dll = 1; /* FIXME */
CRTDLL__osversion_dll = (version & 0xFFFF);
- _winmajor = (_osver >> 8) & 0xFF;
- _winminor = _osver & 0xFF;
- _winver = (_winmajor << 8) + _winminor;
- _osver = (_osver >> 16) & 0xFFFF;
-
- /* create tls stuff */
- if (!msvcrt_init_tls())
- return FALSE;
-
- if (BlockEnvToEnvironA() < 0)
- return FALSE;
-
- if (BlockEnvToEnvironW() < 0)
+ if (!crt_process_init())
{
- FreeEnvironment(_environ);
+ ERR("crt_init() failed!\n");
return FALSE;
}
- _acmdln = _strdup(GetCommandLineA());
- _wcmdln = _wcsdup(GetCommandLineW());
-
- /* Initialization of the WINE code */
- msvcrt_init_mt_locks();
- //if(!msvcrt_init_locale()) {
- //msvcrt_free_mt_locks();
- // msvcrt_free_tls_mem();
- //return FALSE;
- //}
- //msvcrt_init_math();
- msvcrt_init_io();
- //msvcrt_init_console();
- //msvcrt_init_args();
- //msvcrt_init_signals();
- _setmbcp(_MB_CP_LOCALE);
TRACE("Attach done\n");
break;
case DLL_THREAD_ATTACH:
/* EXTERNAL PROTOTYPES ********************************************************/
-extern int BlockEnvToEnvironA(void);
-extern int BlockEnvToEnvironW(void);
-extern void FreeEnvironment(char **environment);
+BOOL crt_process_init(void);
-extern unsigned int _osplatform;
-extern unsigned int _osver;
-extern unsigned int _winminor;
-extern unsigned int _winmajor;
-extern unsigned int _winver;
+extern void FreeEnvironment(char **environment);
-extern char* _acmdln; /* pointer to ascii command line */
-extern wchar_t* _wcmdln; /* pointer to wide character command line */
#undef _environ
extern char** _environ; /* pointer to environment block */
extern char** __initenv; /* pointer to initial environment block */
WINAPI
DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
{
- OSVERSIONINFOW osvi;
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
- /* initialize version info */
- TRACE("Process Attach\n");
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
- GetVersionExW( &osvi );
- _winver = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion;
- _winmajor = osvi.dwMajorVersion;
- _winminor = osvi.dwMinorVersion;
- _osplatform = osvi.dwPlatformId;
- _osver = osvi.dwBuildNumber;
-
- /* create tls stuff */
- if (!msvcrt_init_tls())
- return FALSE;
- if (BlockEnvToEnvironA() < 0)
- return FALSE;
+ TRACE("Process Attach\n");
- if (BlockEnvToEnvironW() < 0)
+ if (!crt_process_init())
{
- FreeEnvironment(_environ);
+ ERR("crt_init() failed!\n");
return FALSE;
}
- _acmdln = _strdup(GetCommandLineA());
- _wcmdln = _wcsdup(GetCommandLineW());
-
- /* Initialization of the WINE code */
- msvcrt_init_mt_locks();
- //msvcrt_init_math();
- msvcrt_init_io();
- //msvcrt_init_console();
- //msvcrt_init_args();
- //msvcrt_init_signals();
TRACE("Attach done\n");
break;
--- /dev/null
+
+#include <precomp.h>
+
+extern int BlockEnvToEnvironA(void);
+extern int BlockEnvToEnvironW(void);
+extern void FreeEnvironment(char **environment);
+
+extern void msvcrt_init_mt_locks(void);
+extern void msvcrt_init_io(void);
+
+extern char* _acmdln; /* pointer to ascii command line */
+extern wchar_t* _wcmdln; /* pointer to wide character command line */
+#undef _environ
+extern char** _environ; /* pointer to environment block */
+extern char** __initenv; /* pointer to initial environment block */
+extern wchar_t** _wenviron; /* pointer to environment block */
+extern wchar_t** __winitenv; /* pointer to initial environment block */
+
+BOOL
+crt_process_init(void)
+{
+ OSVERSIONINFOW osvi;
+
+ /* initialize version info */
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
+ GetVersionExW(&osvi);
+ _winver = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion;
+ _winmajor = osvi.dwMajorVersion;
+ _winminor = osvi.dwMinorVersion;
+ _osplatform = osvi.dwPlatformId;
+ _osver = osvi.dwBuildNumber;
+
+ /* create tls stuff */
+ if (!msvcrt_init_tls())
+ return FALSE;
+
+ if (BlockEnvToEnvironA() < 0)
+ return FALSE;
+
+ if (BlockEnvToEnvironW() < 0)
+ {
+ FreeEnvironment(_environ);
+ return FALSE;
+ }
+
+ _acmdln = _strdup(GetCommandLineA());
+ _wcmdln = _wcsdup(GetCommandLineW());
+
+ /* Initialization of the WINE code */
+ msvcrt_init_mt_locks();
+
+ //msvcrt_init_math();
+ msvcrt_init_io();
+ //msvcrt_init_console();
+ //msvcrt_init_args();
+ //msvcrt_init_signals();
+
+ return TRUE;
+}
misc/__crt_MessageBoxA.c
misc/amsg.c
misc/assert.c
+ misc/crt_init.c
misc/environ.c
misc/getargs.c
misc/i10output.c
}
int __cdecl mainCRTStartup (void);
+BOOL crt_process_init(void);
#ifdef _WIN64
int __mingw_init_ehandler (void);
int __cdecl mainCRTStartup (void)
{
int ret = 255;
+#ifndef _DLL
+ if (!crt_process_init())
+ {
+ return -1;
+ }
+#endif
#ifdef __SEH__
asm ("\t.l_start:\n"
"\t.seh_handler __C_specific_handler, @except\n"