diff options
-rw-r--r-- | src/fileio.c | 5 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |