Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
brammool committed May 12, 2018
1 parent 3f1a53c commit 8c3169c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/memline.c
Expand Up @@ -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
Expand Down Expand Up @@ -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 */
Expand Down
15 changes: 15 additions & 0 deletions src/testdir/test_swap.vim
Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -761,6 +761,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1819,
/**/
1818,
/**/
Expand Down

0 comments on commit 8c3169c

Please sign in to comment.