summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-05-12 17:04:12 +0200
committerBram Moolenaar <Bram@vim.org>2018-05-12 17:04:12 +0200
commit8c3169c58eef3e04f643fe9e045a97b81429e0cb (patch)
tree0a7598c9711a60f8c0aa6aa896772596796a30db
parent3f1a53c4349a309c3f4acf358d3cf18f9c455050 (diff)
patch 8.0.1819: swap file warning for file with non-existing directoryv8.0.1819
Problem: Swap file warning for a file in a non-existing directory, if there is another with the same file name. (Juergen Weigert) Solution: When expanding the file name fails compare the file names.
-rw-r--r--src/memline.c11
-rw-r--r--src/testdir/test_swap.vim15
-rw-r--r--src/version.c2
3 files changed, 23 insertions, 5 deletions
diff --git a/src/memline.c b/src/memline.c
index 4be1036f05..7d6cefaa02 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -4648,8 +4648,8 @@ b0_magic_wrong(ZERO_BL *b0p)
* == 0 == 0 OK FAIL TRUE
*
* current file doesn't exist, inode for swap unknown, both file names not
- * available -> probably same file
- * == 0 == 0 FAIL FAIL FALSE
+ * available -> compare file names
+ * == 0 == 0 FAIL FAIL fname_c != fname_s
*
* Note that when the ino_t is 64 bits, only the last 32 will be used. This
* can't be changed without making the block 0 incompatible with 32 bit
@@ -4693,14 +4693,15 @@ fnamecmp_ino(
retval_c = vim_FullName(fname_c, buf_c, MAXPATHL, TRUE);
retval_s = vim_FullName(fname_s, buf_s, MAXPATHL, TRUE);
if (retval_c == OK && retval_s == OK)
- return (STRCMP(buf_c, buf_s) != 0);
+ return STRCMP(buf_c, buf_s) != 0;
/*
* Can't compare inodes or file names, guess that the files are different,
- * unless both appear not to exist at all.
+ * unless both appear not to exist at all, then compare with the file name
+ * in the swap file.
*/
if (ino_s == 0 && ino_c == 0 && retval_c == FAIL && retval_s == FAIL)
- return FALSE;
+ return STRCMP(fname_c, fname_s) != 0;
return TRUE;
}
#endif /* CHECK_INODE */
diff --git a/src/testdir/test_swap.vim b/src/testdir/test_swap.vim
index 1c4965ea5f..da5da2dbbd 100644
--- a/src/testdir/test_swap.vim
+++ b/src/testdir/test_swap.vim
@@ -82,3 +82,18 @@ func Test_swap_group()
call delete('Xtest')
endtry
endfunc
+
+func Test_missing_dir()
+ call mkdir('Xswapdir')
+ exe 'set directory=' . getcwd() . '/Xswapdir'
+
+ call assert_equal('', glob('foo'))
+ call assert_equal('', glob('bar'))
+ edit foo/x.txt
+ " This should not give a warning for an existing swap file.
+ split bar/x.txt
+ only
+
+ set directory&
+ call delete('Xswapdir', 'rf')
+endfunc
diff --git a/src/version.c b/src/version.c
index 5d85a807be..a6fd36a125 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1819,
+/**/
1818,
/**/
1817,