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)
diff --git a/src/misc1.c b/src/misc1.c
index e76e4a4..550a727 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -2691,13 +2691,15 @@
* 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 @@
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 @@
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 @@
/*
* 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)