Commit 5ab5e1c5 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

Fix prototypes of MSVCRT___getmainargs and MSVCRT___wgetmainargs.

Protect MSVCRT__acmdln global variable from corruption.
parent 9f758cc5
...@@ -142,8 +142,13 @@ void MSVCRT_init_args(void) ...@@ -142,8 +142,13 @@ void MSVCRT_init_args(void)
int xargc,end,last_arg,afterlastspace; int xargc,end,last_arg,afterlastspace;
DWORD version; DWORD version;
MSVCRT__acmdln = cmdline = MSVCRT__strdup( GetCommandLineA() ); MSVCRT__acmdln = MSVCRT__strdup( GetCommandLineA() );
MSVCRT__wcmdln = wcmdline = wstrdupa(cmdline); MSVCRT__wcmdln = wcmdline = wstrdupa(MSVCRT__acmdln);
/* Make a copy of MSVCRT__acmdln to be able modify it.
We will free it at the end of processing. */
cmdline = MSVCRT__strdup(MSVCRT__acmdln);
TRACE("got '%s', wide = '%s'\n", cmdline, debugstr_w(wcmdline)); TRACE("got '%s', wide = '%s'\n", cmdline, debugstr_w(wcmdline));
version = GetVersion(); version = GetVersion();
...@@ -207,6 +212,9 @@ void MSVCRT_init_args(void) ...@@ -207,6 +212,9 @@ void MSVCRT_init_args(void)
MSVCRT___argv = xargv; MSVCRT___argv = xargv;
MSVCRT___wargv = wxargv; MSVCRT___wargv = wxargv;
/* Free a no more needed copy of the command line */
MSVCRT_free( cmdline );
TRACE("found %d arguments\n",MSVCRT___argc); TRACE("found %d arguments\n",MSVCRT___argc);
MSVCRT__environ = GetEnvironmentStringsA(); MSVCRT__environ = GetEnvironmentStringsA();
MSVCRT___initenv = &MSVCRT__environ; MSVCRT___initenv = &MSVCRT__environ;
...@@ -224,25 +232,25 @@ void MSVCRT_free_args(void) ...@@ -224,25 +232,25 @@ void MSVCRT_free_args(void)
/********************************************************************* /*********************************************************************
* __getmainargs (MSVCRT.@) * __getmainargs (MSVCRT.@)
*/ */
char** __cdecl MSVCRT___getmainargs(DWORD *argc,char ***argv,char **environ,DWORD flag) void __cdecl MSVCRT___getmainargs(int *argc, char ***argv, char **environ,
int expand_wildcards, void *_startupinfo)
{ {
TRACE("(%p,%p,%p,%ld).\n",argc,argv,environ,flag); TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, environ, expand_wildcards, _startupinfo);
*argc = MSVCRT___argc; *argc = MSVCRT___argc;
*argv = MSVCRT___argv; *argv = MSVCRT___argv;
*environ = MSVCRT__environ; *environ = MSVCRT__environ;
return environ;
} }
/********************************************************************* /*********************************************************************
* __wgetmainargs (MSVCRT.@) * __wgetmainargs (MSVCRT.@)
*/ */
WCHAR** __cdecl MSVCRT___wgetmainargs(DWORD *argc,WCHAR ***wargv,WCHAR **wenviron,DWORD flag) void __cdecl MSVCRT___wgetmainargs(int *argc, WCHAR ***wargv, WCHAR **wenviron,
int expand_wildcards, void *_startupinfo)
{ {
TRACE("(%p,%p,%p,%ld).\n",argc,wargv,wenviron,flag); TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenviron, expand_wildcards, _startupinfo);
*argc = MSVCRT___argc; *argc = MSVCRT___argc;
*wargv = MSVCRT___wargv; *wargv = MSVCRT___wargv;
*wenviron = MSVCRT__wenviron; *wenviron = MSVCRT__wenviron;
return wenviron;
} }
/********************************************************************* /*********************************************************************
......
...@@ -96,7 +96,7 @@ debug_channels (msvcrt) ...@@ -96,7 +96,7 @@ debug_channels (msvcrt)
@ cdecl __dllonexit(ptr ptr ptr) MSVCRT___dllonexit @ cdecl __dllonexit(ptr ptr ptr) MSVCRT___dllonexit
@ cdecl __doserrno() MSVCRT___doserrno @ cdecl __doserrno() MSVCRT___doserrno
@ stub __fpecode #() @ stub __fpecode #()
@ cdecl __getmainargs(ptr ptr ptr long) MSVCRT___getmainargs @ cdecl __getmainargs(ptr ptr ptr long ptr) MSVCRT___getmainargs
@ extern __initenv MSVCRT___initenv @ extern __initenv MSVCRT___initenv
@ cdecl __isascii(long) MSVCRT___isascii @ cdecl __isascii(long) MSVCRT___isascii
@ cdecl __iscsym(long) MSVCRT___iscsym @ cdecl __iscsym(long) MSVCRT___iscsym
...@@ -147,7 +147,7 @@ debug_channels (msvcrt) ...@@ -147,7 +147,7 @@ debug_channels (msvcrt)
@ cdecl __unDNameEx() MSVCRT___unDNameEx #FIXME @ cdecl __unDNameEx() MSVCRT___unDNameEx #FIXME
@ extern __unguarded_readlc_active MSVCRT___unguarded_readlc_active @ extern __unguarded_readlc_active MSVCRT___unguarded_readlc_active
@ extern __wargv MSVCRT___wargv @ extern __wargv MSVCRT___wargv
@ cdecl __wgetmainargs(ptr ptr ptr long) MSVCRT___wgetmainargs @ cdecl __wgetmainargs(ptr ptr ptr long ptr) MSVCRT___wgetmainargs
@ extern __winitenv MSVCRT___winitenv @ extern __winitenv MSVCRT___winitenv
@ cdecl _abnormal_termination() MSVCRT__abnormal_termination @ cdecl _abnormal_termination() MSVCRT__abnormal_termination
@ cdecl _access(str long) MSVCRT__access @ cdecl _access(str long) MSVCRT__access
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment