changeset 7641:b44fc33ef92a v7.4.1120

commit https://github.com/vim/vim/commit/336bd622c31e1805495c034e1a8cfadcc0bbabc7 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 17 18:23:58 2016 +0100 patch 7.4.1120 Problem: delete(x, 'rf') fails if a directory is empty. (Lcd) Solution: Ignore not finding matches in an empty directory.
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Jan 2016 18:30:05 +0100
parents 6da21217eb5a
children a011a3e63dd3
files src/fileio.c src/misc1.c src/testdir/test_delete.vim src/version.c src/vim.h
diffstat 5 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -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)
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -11087,7 +11087,7 @@ gen_expand_wildcards(num_pat, pat, num_f
 
     recursive = FALSE;
 
-    return (ga.ga_data != NULL) ? retval : FAIL;
+    return ((flags & EW_EMPTYOK) || ga.ga_data != NULL) ? retval : FAIL;
 }
 
 # ifdef VIM_BACKTICK
--- a/src/testdir/test_delete.vim
+++ b/src/testdir/test_delete.vim
@@ -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'))
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1120,
+/**/
     1119,
 /**/
     1118,
--- a/src/vim.h
+++ b/src/vim.h
@@ -836,6 +836,7 @@ extern char *(*dyn_libintl_textdomain)(c
 #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 */