mingw: get pw_name in UTF-8 format
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 27 Jun 2019 09:37:18 +0000 (02:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2019 19:56:13 +0000 (12:56 -0700)
Previously, we would have obtained the user name encoded in whatever the
current code page is.

Note: the "user name" here does not denote the full name but instead the
short logon name.

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

index 9b6d240..8526876 100644 (file)
@@ -1946,13 +1946,19 @@ struct passwd *getpwuid(int uid)
        static unsigned initialized;
        static char user_name[100];
        static struct passwd *p;
+       wchar_t buf[100];
        DWORD len;
 
        if (initialized)
                return p;
 
-       len = sizeof(user_name);
-       if (!GetUserName(user_name, &len)) {
+       len = sizeof(buf);
+       if (!GetUserNameW(buf, &len)) {
+               initialized = 1;
+               return NULL;
+       }
+
+       if (xwcstoutf(user_name, buf, sizeof(user_name)) < 0) {
                initialized = 1;
                return NULL;
        }