mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
correct _environ assignment, because it's an array of pointers
and GetEnvironmentString return a pointer. svn path=/trunk/; revision=1539
This commit is contained in:
parent
d2833af32c
commit
3116ca9df2
1 changed files with 32 additions and 1 deletions
|
@ -36,8 +36,37 @@ char ***__argv_dll = &__argv;
|
||||||
char **_environ;
|
char **_environ;
|
||||||
#undef _environ_dll
|
#undef _environ_dll
|
||||||
char *** _environ_dll = &_environ;
|
char *** _environ_dll = &_environ;
|
||||||
|
static int envAlloced = 0;
|
||||||
|
|
||||||
|
|
||||||
|
int BlockEnvToEnviron()
|
||||||
|
{
|
||||||
|
char * ptr;
|
||||||
|
int i;
|
||||||
|
if (!envAlloced)
|
||||||
|
{
|
||||||
|
envAlloced = 50;
|
||||||
|
_environ = malloc (envAlloced * sizeof (char **));
|
||||||
|
if (!_environ) return -1;
|
||||||
|
_environ[0] =NULL;
|
||||||
|
}
|
||||||
|
ptr = (char *)GetEnvironmentStringsA();
|
||||||
|
if (!ptr) return -1;
|
||||||
|
for (i = 0 ; *ptr ; i++)
|
||||||
|
{
|
||||||
|
if(i>envAlloced-2)
|
||||||
|
{
|
||||||
|
envAlloced = i+3;
|
||||||
|
_environ = realloc (_environ,envAlloced * sizeof (char **));
|
||||||
|
}
|
||||||
|
_environ[i] = ptr;
|
||||||
|
while(*ptr) ptr++;
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
_environ[i] =0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
||||||
{
|
{
|
||||||
int i,afterlastspace;
|
int i,afterlastspace;
|
||||||
|
@ -56,6 +85,7 @@ int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
||||||
|
|
||||||
i=0;
|
i=0;
|
||||||
afterlastspace=0;
|
afterlastspace=0;
|
||||||
|
__argc=0;
|
||||||
|
|
||||||
while (_acmdln_dll[i])
|
while (_acmdln_dll[i])
|
||||||
{
|
{
|
||||||
|
@ -83,7 +113,8 @@ int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
||||||
}
|
}
|
||||||
HeapValidate(GetProcessHeap(),0,NULL);
|
HeapValidate(GetProcessHeap(),0,NULL);
|
||||||
|
|
||||||
_environ = (char **)GetEnvironmentStringsA();;
|
if( BlockEnvToEnviron() )
|
||||||
|
return FALSE;
|
||||||
_environ_dll = &_environ;
|
_environ_dll = &_environ;
|
||||||
|
|
||||||
*argc = __argc;
|
*argc = __argc;
|
||||||
|
|
Loading…
Reference in a new issue