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)