From 69d328022ebbde0595d328dd0e9d569a93a2d662 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Mon, 1 Apr 2019 10:30:40 +0100 Subject: win32: track current directory of mapped drives Drives mapped to a network share or path didn't have their current directory tracked when using path names of the form 'c:path'. This was because commit 585d17d26 used realpath(3) to canonicalise paths in chdir(2). Use readlink(2) instead so that mapped drives aren't canonicalised but symlinks are resolved. See GitHub issue #147. --- win32/mingw.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'win32') diff --git a/win32/mingw.c b/win32/mingw.c index ec7d6c456..22a3ede58 100644 --- a/win32/mingw.c +++ b/win32/mingw.c @@ -1204,13 +1204,16 @@ int mingw_mkdir(const char *path, int mode UNUSED_PARAM) #undef chdir int mingw_chdir(const char *dirname) { + struct stat st; int ret = -1; - char *realdir = xmalloc_realpath(dirname); + const char *realdir = dirname; + + if (lstat(dirname, &st) == 0 && S_ISLNK(st.st_mode)) + realdir = auto_string(xmalloc_readlink(dirname)); - if (realdir) { + if (realdir) ret = chdir(realdir); - free(realdir); - } + return ret; } -- cgit v1.2.3-55-g6feb