diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-06-20 14:02:27 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-06-20 14:02:27 +0200 |
commit | 9158f9e42355bfa1d956cb75cdaef37b4ab80f35 (patch) | |
tree | fe906325d497e863c8b2a3ce792d4c4e4e76ae07 | |
parent | dc7e85ee5d29bd65681ff61b37d8e8cd38c22330 (diff) | |
download | vim-git-9158f9e42355bfa1d956cb75cdaef37b4ab80f35.tar.gz |
updated for version 7.3.559v7.3.559
Problem: home_replace() does not work with 8.3 filename.
Solution: Make ":p" expand 8.3 name to full path. (Yasuhiro Matsumoto)
-rw-r--r-- | src/eval.c | 21 | ||||
-rw-r--r-- | src/misc1.c | 24 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 44 insertions, 3 deletions
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 @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 559, +/**/ 558, /**/ 557, |