summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-12-21 10:06:11 +0100
committerWerner Koch <wk@gnupg.org>2020-12-21 10:06:11 +0100
commit007cfe8a0ca4c03412f031878d6ce232612a90d8 (patch)
tree834bd356ba96c302afecb608817aad9fe3875d73 /src
parent4b09c8c2023d52b97be6069c20897ebfb25f9bca (diff)
downloadlibgpg-error-007cfe8a0ca4c03412f031878d6ce232612a90d8.tar.gz
w32: Allow Unicode for internal getusername function.
* src/sysutils.c (_gpgrt_getusername) [W32]: Use GetUserNameW. -- This is used by argparse for user specific parts. Tested using the echo meta-command. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src')
-rw-r--r--src/sysutils.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/sysutils.c b/src/sysutils.c
index 8005a51..ebd587c 100644
--- a/src/sysutils.c
+++ b/src/sysutils.c
@@ -482,17 +482,27 @@ _gpgrt_getusername (void)
char *result = NULL;
#ifdef HAVE_W32_SYSTEM
- char tmp[1];
- DWORD size = 1;
-
- /* FIXME: We need to support utf8 */
- GetUserNameA (tmp, &size);
- result = _gpgrt_malloc (size);
- if (result && !GetUserNameA (result, &size))
+ wchar_t wtmp[1];
+ wchar_t *wbuf;
+ DWORD wsize = 1;
+ char *buf;
+
+ GetUserNameW (wtmp, &wsize);
+ wbuf = _gpgrt_malloc (wsize * sizeof *wbuf);
+ if (!wbuf)
+ {
+ _gpgrt_w32_set_errno (-1);
+ return NULL;
+ }
+ if (!GetUserNameW (wbuf, &wsize))
{
- xfree (result);
- result = NULL;
+ _gpgrt_w32_set_errno (-1);
+ xfree (wbuf);
+ return NULL;
}
+ buf = _gpgrt_wchar_to_utf8 (wbuf, wsize);
+ xfree (wbuf);
+ return buf;
#else /* !HAVE_W32_SYSTEM */