summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-01-17 18:23:58 +0100
committerBram Moolenaar <Bram@vim.org>2016-01-17 18:23:58 +0100
commit336bd622c31e1805495c034e1a8cfadcc0bbabc7 (patch)
treecd49277ac430addcad75432e8d9a462cab82e0a4
parent72defda84eb26be9e2ade56c7877b912f818026e (diff)
downloadvim-git-7.4.1120.tar.gz
patch 7.4.1120v7.4.1120
Problem: delete(x, 'rf') fails if a directory is empty. (Lcd) Solution: Ignore not finding matches in an empty directory.
-rw-r--r--src/fileio.c2
-rw-r--r--src/misc1.c2
-rw-r--r--src/testdir/test_delete.vim2
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
5 files changed, 7 insertions, 2 deletions
diff --git a/src/fileio.c b/src/fileio.c
index fdaad20bb..55337d682 100644
--- 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)
diff --git a/src/misc1.c b/src/misc1.c
index fd63ec37f..a44e4d681 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -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
diff --git a/src/testdir/test_delete.vim b/src/testdir/test_delete.vim
index 13c87a152..3cf26234d 100644
--- 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'))
diff --git a/src/version.c b/src/version.c
index f26828c85..ef98ee4b8 100644
--- 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,
diff --git a/src/vim.h b/src/vim.h
index a39c6fda5..7180d2372 100644
--- 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 */