www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1995/02/07/00:02:59

Date: Mon, 6 Feb 1995 21:44:50 -0500 (EST)
From: Long Doan <ldoan1 AT osf1 DOT gmu DOT edu>
To: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
Cc: Bill Davidson <bdavidson AT ra DOT isisnet DOT com>, djgpp AT sun DOT soe DOT clarkson DOT edu
Subject: Re: putenv() and system()

On Mon, 6 Feb 1995, Eli Zaretskii wrote:

> > the COPY.  When you call system() the shell gets its own copy of 
> > the (unmodified) master environment, because it gets from the same source 
> > your program did.  So the flow is OS-->yourprog-->OS-->system().
> 
> No, it's OS-->myprog-->COMMAND.COM which is child of myprog-->child,
> so it should work (as it does with other compilers).
> 
> The problem is, as far as I could see, that putenv() only
> puts the variable into an environment block which is then
> used by the spawnXXX() family, while system() is implemented
> in the current version of the library by directly calling
> go32 exception handler which is only passed the string you
> give to system().  Thus, system() never sees the additional
> environment variables you set with putenv().

Upon startup, GO32 recieved a copy of the environment from DOS, it then 
copied this environment to the program stack (it can be found at esp+8). 
(This only apply to the program being run, not the debugger, in V1.1x.) 
When the program calls putenv (), it only modifies its own copy of the 
environment, which will be coppied to the child process's stack. But 
when system () is called, command.com looks at DOS's copy of the 
environment, which doesn't have the modification.

+--------------------------------------------------------+
| Long Doan                          ldoan1 AT osf1 DOT gmu DOT edu |
|                                          ld AT netrix DOT com |
+--------------------------------------------------------+


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019