forked from aniani/vim
patch 8.1.1371: cannot recover from a swap file
Problem: Cannot recover from a swap file. Solution: Do not expand environment variables in the swap file name. Do not check the extension when we already know a file is a swap file. (Ken Takata, closes 4415, closes #4369)
This commit is contained in:
18
src/misc1.c
18
src/misc1.c
@@ -2691,13 +2691,15 @@ home_replace_save(
|
||||
* FPC_DIFF if they both exist and are different files.
|
||||
* FPC_NOTX if they both don't exist.
|
||||
* FPC_DIFFX if one of them doesn't exist.
|
||||
* For the first name environment variables are expanded
|
||||
* For the first name environment variables are expanded if "expandenv" is
|
||||
* TRUE.
|
||||
*/
|
||||
int
|
||||
fullpathcmp(
|
||||
char_u *s1,
|
||||
char_u *s2,
|
||||
int checkname) /* when both don't exist, check file names */
|
||||
int checkname, // when both don't exist, check file names
|
||||
int expandenv)
|
||||
{
|
||||
#ifdef UNIX
|
||||
char_u exp1[MAXPATHL];
|
||||
@@ -2706,7 +2708,10 @@ fullpathcmp(
|
||||
stat_T st1, st2;
|
||||
int r1, r2;
|
||||
|
||||
expand_env(s1, exp1, MAXPATHL);
|
||||
if (expandenv)
|
||||
expand_env(s1, exp1, MAXPATHL);
|
||||
else
|
||||
vim_strncpy(exp1, s1, MAXPATHL - 1);
|
||||
r1 = mch_stat((char *)exp1, &st1);
|
||||
r2 = mch_stat((char *)s2, &st2);
|
||||
if (r1 != 0 && r2 != 0)
|
||||
@@ -2741,7 +2746,10 @@ fullpathcmp(
|
||||
full1 = exp1 + MAXPATHL;
|
||||
full2 = full1 + MAXPATHL;
|
||||
|
||||
expand_env(s1, exp1, MAXPATHL);
|
||||
if (expandenv)
|
||||
expand_env(s1, exp1, MAXPATHL);
|
||||
else
|
||||
vim_strncpy(exp1, s1, MAXPATHL - 1);
|
||||
r1 = vim_FullName(exp1, full1, MAXPATHL, FALSE);
|
||||
r2 = vim_FullName(s2, full2, MAXPATHL, FALSE);
|
||||
|
||||
@@ -4027,7 +4035,7 @@ gen_expand_wildcards(
|
||||
/*
|
||||
* First expand environment variables, "~/" and "~user/".
|
||||
*/
|
||||
if (has_env_var(p) || *p == '~')
|
||||
if ((has_env_var(p) && !(flags & EW_NOTENV)) || *p == '~')
|
||||
{
|
||||
p = expand_env_save_opt(p, TRUE);
|
||||
if (p == NULL)
|
||||
|
Reference in New Issue
Block a user