Correctly generate the environment global variables.
This commit is contained in:
parent
63b1d175b3
commit
2f6744b37c
@ -142,9 +142,9 @@ static WCHAR *wstrdupa(const char *str)
|
|||||||
*/
|
*/
|
||||||
void msvcrt_init_args(void)
|
void msvcrt_init_args(void)
|
||||||
{
|
{
|
||||||
char *cmdline, **xargv = NULL;
|
char *cmdline, **xargv = NULL, *ptr, *env;
|
||||||
WCHAR *wcmdline, **wxargv = NULL;
|
WCHAR *wcmdline, **wxargv = NULL, *wptr, *wenv;
|
||||||
int xargc,end,last_arg,afterlastspace;
|
int xargc,end,last_arg,afterlastspace,count;
|
||||||
DWORD version;
|
DWORD version;
|
||||||
|
|
||||||
MSVCRT__acmdln = _strdup( GetCommandLineA() );
|
MSVCRT__acmdln = _strdup( GetCommandLineA() );
|
||||||
@ -221,15 +221,42 @@ void msvcrt_init_args(void)
|
|||||||
MSVCRT_free( cmdline );
|
MSVCRT_free( cmdline );
|
||||||
|
|
||||||
TRACE("found %d arguments\n",MSVCRT___argc);
|
TRACE("found %d arguments\n",MSVCRT___argc);
|
||||||
/* FIXME: This is plain wrong, we must convert from a '\0' separated
|
|
||||||
* memory block to an array of pointers to string format.
|
env = GetEnvironmentStringsA();
|
||||||
*/
|
count = 1; /* for NULL sentinel */
|
||||||
MSVCRT__environ = GetEnvironmentStringsA();
|
for (ptr = env; *ptr; ptr += strlen(ptr) + 1)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
MSVCRT__environ = HeapAlloc(GetProcessHeap(), 0, count * sizeof(char*));
|
||||||
|
if (MSVCRT__environ)
|
||||||
|
{
|
||||||
|
count = 0;
|
||||||
|
for (ptr = env; *ptr; ptr += strlen(ptr) + 1)
|
||||||
|
{
|
||||||
|
MSVCRT__environ[count++] = ptr;
|
||||||
|
}
|
||||||
|
MSVCRT__environ[count] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
MSVCRT___initenv = MSVCRT__environ;
|
MSVCRT___initenv = MSVCRT__environ;
|
||||||
/* FIXME: This is plain wrong, we must convert from a '\0' separated
|
|
||||||
* memory block to an array of pointers to string format.
|
wenv = GetEnvironmentStringsW();
|
||||||
*/
|
count = 1; /* for NULL sentinel */
|
||||||
MSVCRT__wenviron = GetEnvironmentStringsW();
|
for (wptr = wenv; *wptr; wptr += lstrlenW(wptr) + 1)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
MSVCRT__wenviron = HeapAlloc(GetProcessHeap(), 0, count * sizeof(WCHAR*));
|
||||||
|
if (MSVCRT__wenviron)
|
||||||
|
{
|
||||||
|
count = 0;
|
||||||
|
for (wptr = wenv; *wptr; wptr += lstrlenW(wptr) + 1)
|
||||||
|
{
|
||||||
|
MSVCRT__wenviron[count++] = wptr;
|
||||||
|
}
|
||||||
|
MSVCRT__wenviron[count] = NULL;
|
||||||
|
}
|
||||||
MSVCRT___winitenv = MSVCRT__wenviron;
|
MSVCRT___winitenv = MSVCRT__wenviron;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user