# HG changeset patch # User Christian Brabandt # Date 1526138105 -7200 # Node ID 4d5a1ada407e33dc6a16828101a3d65274509ea9 # Parent 029663b959ffacd47f14cdd00a58192942c34942 patch 8.0.1819: swap file warning for file with non-existing directory commit https://github.com/vim/vim/commit/8c3169c58eef3e04f643fe9e045a97b81429e0cb Author: Bram Moolenaar Date: Sat May 12 17:04:12 2018 +0200 patch 8.0.1819: swap file warning for file with non-existing directory 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. diff --git a/src/memline.c b/src/memline.c --- 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 --- 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 --- 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,