mingw: use Unicode functions explicitly
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 27 Jun 2019 09:37:19 +0000 (02:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2019 19:56:15 +0000 (12:56 -0700)
commit94238859b9809afc806919cb7022a45cdc8e6748
tree76a412a16bd4a547d9d288e7d2faf7e8801b4aba
parent39a98e9b68b84e40e759a0805758ec4726c9299e
mingw: use Unicode functions explicitly

Many Win32 API functions actually exist in two variants: one with
the `A` suffix that takes ANSI parameters (`char *` or `const char *`)
and one with the `W` suffix that takes Unicode parameters (`wchar_t *`
or `const wchar_t *`).

The ANSI variant assumes that the strings are encoded according to
whatever is the current locale. This is not what Git wants to use on
Windows: we assume that `char *` variables point to strings encoded in
UTF-8.

There is a pseudo UTF-8 locale on Windows, but it does not work
as one might expect. In addition, if we overrode the user's locale, that
would modify the behavior of programs spawned by Git (such as editors,
difftools, etc), therefore we cannot use that pseudo locale.

Further, it is actually highly encouraged to use the Unicode versions
instead of the ANSI versions, so let's do precisely that.

Note: when calling the Win32 API functions _without_ any suffix, it
depends whether the `UNICODE` constant is defined before the relevant
headers are #include'd. Without that constant, the ANSI variants are
used. Let's be explicit and avoid that ambiguity.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c
compat/poll/poll.c
compat/winansi.c