]> granicus.if.org Git - vim/commitdiff
patch 7.4.1120 v7.4.1120
authorBram Moolenaar <Bram@vim.org>
Sun, 17 Jan 2016 17:23:58 +0000 (18:23 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 17 Jan 2016 17:23:58 +0000 (18:23 +0100)
Problem:    delete(x, 'rf') fails if a directory is empty. (Lcd)
Solution:   Ignore not finding matches in an empty directory.

src/fileio.c
src/misc1.c
src/testdir/test_delete.vim
src/version.c
src/vim.h

index fdaad20bbc0702431187c6ed9ac795e30deea7cb..55337d6825a27ab58396739ffd5c41931ea4a613 100644 (file)
@@ -7313,7 +7313,7 @@ delete_recursive(char_u *name)
        if (exp == NULL)
            return -1;
        if (gen_expand_wildcards(1, &exp, &file_count, &files,
-                        EW_DIR|EW_FILE|EW_SILENT|EW_ALLLINKS|EW_DODOT) == OK)
+             EW_DIR|EW_FILE|EW_SILENT|EW_ALLLINKS|EW_DODOT|EW_EMPTYOK) == OK)
        {
            for (i = 0; i < file_count; ++i)
                if (delete_recursive(files[i]) != 0)
index fd63ec37f6bb9865e00f1ffbdff7381c1a502451..a44e4d6819a07ffb0286cb78aa147f0e82df1476 100644 (file)
@@ -11087,7 +11087,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
 
     recursive = FALSE;
 
-    return (ga.ga_data != NULL) ? retval : FAIL;
+    return ((flags & EW_EMPTYOK) || ga.ga_data != NULL) ? retval : FAIL;
 }
 
 # ifdef VIM_BACKTICK
index 13c87a152f2422c775bdc0f64f4f0cebb09238e4..3cf26234dcf02fbdbebb76a6dcf3ff9f13dcb437 100644 (file)
@@ -21,6 +21,7 @@ endfunc
 func Test_recursive_delete()
   call mkdir('Xdir1')
   call mkdir('Xdir1/subdir')
+  call mkdir('Xdir1/empty')
   split Xdir1/Xfile
   call setline(1, ['a', 'b'])
   w
@@ -30,6 +31,7 @@ func Test_recursive_delete()
   call assert_equal(['a', 'b'], readfile('Xdir1/Xfile'))
   call assert_true(isdirectory('Xdir1/subdir'))
   call assert_equal(['a', 'b'], readfile('Xdir1/subdir/Xfile'))
+  call assert_true(isdirectory('Xdir1/empty'))
   call assert_equal(0, delete('Xdir1', 'rf'))
   call assert_false(isdirectory('Xdir1'))
   call assert_equal(-1, delete('Xdir1', 'd'))
index f26828c85ca2049963093c9afaaa1408e2a3e1ae..ef98ee4b8ad4fcb6c732c2fcbede40ffbfea0798 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1120,
 /**/
     1119,
 /**/
index a39c6fda5e7f3d73587a6aef38dac46def0a1c58..7180d2372cdf21c36240f4624dad8b8ea2ca738f 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -836,6 +836,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define EW_SHELLCMD    0x2000  /* called from expand_shellcmd(), don't check
                                 * if executable is in $PATH */
 #define EW_DODOT       0x4000  /* also files starting with a dot */
+#define EW_EMPTYOK     0x8000  /* no matches is not an error */
 
 /* Flags for find_file_*() functions. */
 #define FINDFILE_FILE  0       /* only files */