mingw: HOT FIX: work around environment issues -- again

This developer should really, really have known better. The fact that we
are changing the environment in ways for which the MSVCRT is not
prepared for is bad enough. But then this developer followed the request
to re-enable nedmalloc -- despite the prediction that it would cause an
access violation, predicting it in the same message as the request to
re-enable nedmalloc, no less!

To paper over the issue until the time when this developer finds the
time to re-design the Unicode environment handling from scratch, let's
hope that cURL is the only library we are using that *may* set an
environment variable using MSVCRT's putenv() after we fscked the
environment up.

Note: this commit can serve as no source of pride to anyone, certainly
not yours truly. It is necessary as a quick and pragmatic stop gap,
though, to prevent worse problems.

Note: cURL manages to set the variable CHARSET when nedmalloc is *not*
enabled, without causing an access violation. In that case, it sets it
successfully to the value "cp" + GetACP() (hence it is our choice, too,
cURL may need it, Git does not):

	https://github.com/bagder/curl/blob/aa5808b5/lib/easy.c#L157-L162

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2015-04-07 10:24:55 +01:00
committed by Jameson Miller
parent ab9fc3ec72
commit e1299fe95f

View File

@@ -2495,6 +2495,17 @@ void mingw_startup(void)
unset_environment_variables = xstrdup("PERL5LIB");
/*
* Avoid a segmentation fault when cURL tries to set the CHARSET
* variable and putenv() barfs at our nedmalloc'ed environment.
*/
if (!getenv("CHARSET")) {
struct strbuf buf = STRBUF_INIT;
strbuf_addf(&buf, "cp%u", GetACP());
setenv("CHARSET", buf.buf, 1);
strbuf_release(&buf);
}
/* initialize critical section for waitpid pinfo_t list */
InitializeCriticalSection(&pinfo_cs);