From 7497b633e9ffbc48cda46215b2d5b1194a3b3a5f Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 11 Apr 2017 13:51:16 +0200 Subject: win32: rewrite getcwd() using GetFullPathNameW _wgetcwd is apparently not available in all runtimes. Well, whatever. --- osdep/io.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'osdep') diff --git a/osdep/io.c b/osdep/io.c index 1e1bf19ccf..cee5acd605 100644 --- a/osdep/io.c +++ b/osdep/io.c @@ -337,9 +337,18 @@ int mp_mkdir(const char *path, int mode) char *mp_win32_getcwd(char *buf, size_t size) { - wchar_t *wres = _wgetcwd(NULL, 0); - if (!wres) + if (size >= SIZE_MAX / 3 - 1) { + errno = ENOMEM; return NULL; + } + size_t wbuffer = size * 3 + 1; + wchar_t *wres = talloc_array(NULL, wchar_t, wbuffer); + DWORD wlen = GetFullPathNameW(L".", wbuffer, wres, NULL); + if (wlen >= wbuffer || wlen == 0) { + talloc_free(wres); + errno = wlen ? ERANGE : ENOENT; + return NULL; + } char *t = mp_to_utf8(NULL, wres); free(wres); size_t st = strlen(t); -- cgit v1.2.3