aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 */