]> granicus.if.org Git - vim/commitdiff
patch 8.1.0294: MS-Windows: sometimes uses short directory name v8.1.0294
authorBram Moolenaar <Bram@vim.org>
Sat, 18 Aug 2018 18:20:27 +0000 (20:20 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 18 Aug 2018 18:20:27 +0000 (20:20 +0200)
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
src/version.c

index 85c8a57d11d1c8dd1ff2626742521c1c8b6bf8ea..8065ee858b78233c9a5aa3ed9708cf35ff1a75c5 100644 (file)
@@ -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;
 }
 
 /*
index c5975e8b32722ee12122cbdfb9a58ca48ba7bf7a..8cf1ad45f454961c20ea3c3e34e26de5e90b8eba 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    294,
 /**/
     293,
 /**/