From 3d660bd84208ffc797f9d41423a8951123b3e46e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Fri, 12 Nov 2021 13:56:22 +0000 Subject: win32: another attempt at a UCRT hack The problem with UCRT seems to be that if a process has been started with a non-NULL environment block passed to CreateProcess() any subsequent call to spawnve() with a non-NULL environment pointer fails. Commit 5b48ca53b (win32: pass NULL to spawnve, not environ) fixed the problem in busybox-w32 for those cases where a NULL environment pointer was sufficient. It didn't handle the case where the shell passes a modified environment to its child. All calls to spawnve() in the shell occur in a process which will terminate whether or not the call succeeds. It therefore doesn't matter if we mess with the environment of this process such that spawnve() can be passed a NULL environment pointer. (I think.) --- win32/process.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'win32') diff --git a/win32/process.c b/win32/process.c index 137cb6a39..812e259f4 100644 --- a/win32/process.c +++ b/win32/process.c @@ -268,14 +268,6 @@ spawnveq(int mode, const char *path, char *const *argv, char *const *env) new_path = xasprintf("%s.", path); } -#if defined(_UCRT) - if (env) { - char buffer[64]; - - sprintf(buffer, "BB_HELLO_%d", getpid()); - SetEnvironmentVariable(buffer, "1"); - } -#endif errno = 0; ret = spawnve(mode, new_path ? new_path : path, new_argv, env); -- cgit v1.2.3-55-g6feb