From 3b9fcfcffab8f927a01877804fa6ac5bbca34c7a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 18 Aug 2018 20:20:27 +0200 Subject: [PATCH] patch 8.1.0294: MS-Windows: sometimes uses short directory name Problem: MS-Windows: sometimes uses short directory name. Solution: Expand to long file name with correct caps. (Nobuhiro Takasaki, closes #3334) --- src/os_win32.c | 19 +++++++++++++++++-- src/version.c | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/os_win32.c b/src/os_win32.c index 85c8a57d1..8065ee858 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -3108,6 +3108,8 @@ mch_dirname( char_u *buf, int len) { + char_u abuf[_MAX_PATH + 1]; + /* * Originally this was: * return (getcwd(buf, len) != NULL ? OK : FAIL); @@ -3121,7 +3123,13 @@ mch_dirname( if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0) { - char_u *p = utf16_to_enc(wbuf, NULL); + WCHAR wcbuf[_MAX_PATH + 1]; + char_u *p; + + if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0) + p = utf16_to_enc(wcbuf, NULL); + else + p = utf16_to_enc(wbuf, NULL); if (p != NULL) { @@ -3133,7 +3141,14 @@ mch_dirname( return FAIL; } #endif - return (GetCurrentDirectory(len, (LPSTR)buf) != 0 ? OK : FAIL); + if (GetCurrentDirectory(len, (LPSTR)buf) == 0) + return FAIL; + if (GetLongPathNameA((LPSTR)buf, (LPSTR)abuf, _MAX_PATH) == 0) + // return the short path name + return OK; + + vim_strncpy(abuf, buf, len - 1); + return OK; } /* diff --git a/src/version.c b/src/version.c index c5975e8b3..8cf1ad45f 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 294, /**/ 293, /**/ -- 2.50.1