]> granicus.if.org Git - vim/commitdiff
patch 8.0.1819: swap file warning for file with non-existing directory v8.0.1819
authorBram Moolenaar <Bram@vim.org>
Sat, 12 May 2018 15:04:12 +0000 (17:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 12 May 2018 15:04:12 +0000 (17:04 +0200)
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.

src/memline.c
src/testdir/test_swap.vim
src/version.c

index 4be1036f057514211df5b339f83f49767a0fa56e..7d6cefaa028d2471d4b462a6125cdd92edf1df6b 100644 (file)
@@ -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 */
index 1c4965ea5f75a7bc47a61e3ce033bdd151e2a1e7..da5da2dbbdeddc8dd9dfb8f5ea67273271126715 100644 (file)
@@ -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
index 5d85a807bea32320cd03fc5ce09a6faf8d2cbd74..a6fd36a1258b0f512b1db9c6091fb4eb7fab554d 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1819,
 /**/
     1818,
 /**/