Win32: Unicode environment (incoming)
commitdbbb8d62419167470e43baab1934c2a7af52f3ee
authorKarsten Blees <blees@dcon.de>
Mon, 25 Apr 2011 22:32:27 +0000 (25 23:32 +0100)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 3 May 2012 16:09:52 +0000 (3 11:09 -0500)
tree1dc0f18dbdc08f8ac7e94f93034476788de34562
parent104ea5f96d87b2f954e1744c1014a04fff30f8cd
Win32: Unicode environment (incoming)

Convert environment from UTF-16 to UTF-8 on startup.

No changes to getenv() are necessary, as the MSVCRT version is implemented
on top of char **environ.

However, putenv / _wputenv from MSVCRT no longer work, for two reasons:
1. they try to keep environ, _wenviron and the Win32 process environment
in sync, using the default system encoding instead of UTF-8 to convert
between charsets
2. msysgit and MSVCRT use different allocators, memory allocated in git
cannot be freed by the CRT and vice versa

Implement mingw_putenv using the env_setenv helper function from the
environment merge code.

Note that in case of memory allocation failure, putenv now dies with error
message (due to xrealloc) instead of failing with ENOMEM. As git assumes
setenv / putenv to always succeed, this prevents it from continuing with
incorrect settings.

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