diff --git a/src/eval.c b/src/eval.c index d238dc2ba..83e2016f1 100644 --- a/src/eval.c +++ b/src/eval.c @@ -23554,6 +23554,27 @@ repeat: return -1; } +#ifdef WIN3264 +# if _WIN32_WINNT >= 0x0500 + if (vim_strchr(*fnamep, '~') != NULL) + { + /* Expand 8.3 filename to full path. Needed to make sure the same + * file does not have two different names. + * Note: problem does not occur if _WIN32_WINNT < 0x0500. */ + p = alloc(_MAX_PATH + 1); + if (p != NULL) + { + if (GetLongPathName(*fnamep, p, MAXPATHL)) + { + vim_free(*bufp); + *bufp = *fnamep = p; + } + else + vim_free(p); + } + } +# endif +#endif /* Append a path separator to a directory. */ if (mch_isdir(*fnamep)) { diff --git a/src/misc1.c b/src/misc1.c index 10a0fc065..80e7fa693 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -4499,7 +4499,7 @@ home_replace(buf, src, dst, dstlen, one) { size_t dirlen = 0, envlen = 0; size_t len; - char_u *homedir_env; + char_u *homedir_env, *homedir_env_orig; char_u *p; if (src == NULL) @@ -4525,9 +4525,24 @@ home_replace(buf, src, dst, dstlen, one) dirlen = STRLEN(homedir); #ifdef VMS - homedir_env = mch_getenv((char_u *)"SYS$LOGIN"); + homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN"); #else - homedir_env = mch_getenv((char_u *)"HOME"); + homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME"); +#endif +#if defined(FEAT_MODIFY_FNAME) || defined(WIN3264) + if (vim_strchr(homedir_env, '~') != NULL) + { + int usedlen = 0; + int flen; + char_u *fbuf = NULL; + + flen = (int)STRLEN(homedir_env); + (void)modify_fname(":p", &usedlen, &homedir_env, &fbuf, &flen); + flen = (int)STRLEN(homedir_env); + if (flen > 0 && vim_ispathsep(homedir_env[flen - 1])) + /* Remove the trailing / that is added to a directory. */ + homedir_env[flen - 1] = NUL; + } #endif if (homedir_env != NULL && *homedir_env == NUL) @@ -4585,6 +4600,9 @@ home_replace(buf, src, dst, dstlen, one) /* if (dstlen == 0) out of space, what to do??? */ *dst = NUL; + + if (homedir_env != homedir_env_orig) + vim_free(homedir_env); } /* diff --git a/src/version.c b/src/version.c index 2378abb40..2f09e4be2 100644 --- a/src/version.c +++ b/src/version.c @@ -714,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 559, /**/ 558, /**/