Win32: don't copy the environment twice when spawning child processes
commitfc543eb4893f88efce5af14b563f3c50f032c357
authorKarsten Blees <blees@dcon.de>
Sat, 14 Jan 2012 23:57:14 +0000 (15 00:57 +0100)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Tue, 19 Jun 2012 22:37:34 +0000 (19 23:37 +0100)
tree6016ff8575f185695e25a00e087f1c34eec0f3af
parent7acb8c6886acd79acaa3513c86f52ce9cd02ea9a
Win32: don't copy the environment twice when spawning child processes

When spawning child processes via start_command(), the environment and all
environment entries are copied twice. First by make_augmented_environ /
copy_environ to merge with child_process.env. Then a second time by
make_environment_block to create a sorted environment block string as
required by CreateProcess.

Move the merge logic to make_environment_block so that we only need to copy
the environment once. This changes semantics of the env parameter: it now
expects a delta (such as child_process.env) rather than a full environment.
This is not a problem as the parameter is only used by start_command()
(all other callers previously passed char **environ, and now pass NULL).

The merge logic no longer xstrdup()s the environment strings, so do_putenv
must not free them. Add a parameter to distinguish this from normal putenv.

Remove the now unused make_augmented_environ / free_environ API.

Signed-off-by: Karsten Blees <blees@dcon.de>
compat/mingw.c
compat/mingw.h
run-command.c