mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +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;
|
||||
#undef _environ_dll
|
||||
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 i,afterlastspace;
|
||||
|
@ -56,6 +85,7 @@ int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
|||
|
||||
i=0;
|
||||
afterlastspace=0;
|
||||
__argc=0;
|
||||
|
||||
while (_acmdln_dll[i])
|
||||
{
|
||||
|
@ -83,7 +113,8 @@ int __GetMainArgs(int *argc,char ***argv,char ***env,int flag)
|
|||
}
|
||||
HeapValidate(GetProcessHeap(),0,NULL);
|
||||
|
||||
_environ = (char **)GetEnvironmentStringsA();;
|
||||
if( BlockEnvToEnviron() )
|
||||
return FALSE;
|
||||
_environ_dll = &_environ;
|
||||
|
||||
*argc = __argc;
|
||||
|
|
Loading…
Reference in a new issue