diff src/misc1.c @ 16738:b52ea9c5f1db v8.1.1371

patch 8.1.1371: cannot recover from a swap file commit https://github.com/vim/vim/commit/99499b1c05f85f83876b828eea3f6e14f0f407b4 Author: Bram Moolenaar <Bram@vim.org> Date: Thu May 23 21:35:48 2019 +0200 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)
author Bram Moolenaar <Bram@vim.org>
date Thu, 23 May 2019 21:45:07 +0200
parents ba592f30c082
children ef00b6bc186b
line wrap: on
line diff
--- a/src/misc1.c
+++ b/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)