diff options
author | Werner Koch <wk@gnupg.org> | 2020-12-21 10:06:11 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2020-12-21 10:06:11 +0100 |
commit | 007cfe8a0ca4c03412f031878d6ce232612a90d8 (patch) | |
tree | 834bd356ba96c302afecb608817aad9fe3875d73 /src | |
parent | 4b09c8c2023d52b97be6069c20897ebfb25f9bca (diff) | |
download | libgpg-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.c | 28 |
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 */ |