summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fileio.c5
-rw-r--r--src/testdir/test_functions.vim9
-rw-r--r--src/version.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/src/fileio.c b/src/fileio.c
index 9ef2dbd3bc..af915c665f 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5017,13 +5017,16 @@ delete_recursive(char_u *name)
vim_snprintf((char *)NameBuff, MAXPATHL, "%s/%s", exp,
((char_u **)ga.ga_data)[i]);
if (delete_recursive(NameBuff) != 0)
+ // Remember the failure but continue deleting any further
+ // entries.
result = -1;
}
ga_clear_strings(&ga);
+ if (mch_rmdir(exp) != 0)
+ result = -1;
}
else
result = -1;
- (void)mch_rmdir(exp);
vim_free(exp);
}
else
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index a19dd52719..a87ca3b585 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2242,6 +2242,15 @@ func Test_delete_rf()
call assert_equal(0, delete('Xdir', 'rf'))
call assert_false(filereadable('Xdir/foo.txt'))
call assert_false(filereadable('Xdir/[a-1]/foo.txt'))
+
+ if has('unix')
+ call mkdir('Xdir/Xdir2', 'p')
+ silent !chmod 555 Xdir
+ call assert_equal(-1, delete('Xdir/Xdir2', 'rf'))
+ call assert_equal(-1, delete('Xdir', 'rf'))
+ silent !chmod 755 Xdir
+ call assert_equal(0, delete('Xdir', 'rf'))
+ endif
endfunc
func Test_call()
diff --git a/src/version.c b/src/version.c
index f4d300b39e..0e42966d96 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4696,
+/**/
4695,
/**/
4694,