mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.4696: delete() with "rf" argument does not report a failure (#18002)
Problem: delete() with "rf" argument does not report a failure.
Solution: Return -1 if the directory could not be removed. (closes vim/vim#10078)
478700336d
This commit is contained in:
parent
f86f74c12f
commit
128bedc0d2
@ -5408,15 +5408,18 @@ int delete_recursive(const char *name)
|
|||||||
for (int i = 0; i < ga.ga_len; i++) {
|
for (int i = 0; i < ga.ga_len; i++) {
|
||||||
vim_snprintf((char *)NameBuff, MAXPATHL, "%s/%s", exp, ((char_u **)ga.ga_data)[i]);
|
vim_snprintf((char *)NameBuff, MAXPATHL, "%s/%s", exp, ((char_u **)ga.ga_data)[i]);
|
||||||
if (delete_recursive((const char *)NameBuff) != 0) {
|
if (delete_recursive((const char *)NameBuff) != 0) {
|
||||||
|
// Remember the failure but continue deleting any further
|
||||||
|
// entries.
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ga_clear_strings(&ga);
|
ga_clear_strings(&ga);
|
||||||
|
if (os_rmdir(exp) != 0) {
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
// Note: "name" value may be changed in delete_recursive(). Must use the saved value.
|
|
||||||
result = os_rmdir(exp) == 0 ? 0 : -1;
|
|
||||||
xfree(exp);
|
xfree(exp);
|
||||||
} else {
|
} else {
|
||||||
// Delete symlink only.
|
// Delete symlink only.
|
||||||
|
@ -1662,6 +1662,15 @@ func Test_delete_rf()
|
|||||||
call assert_equal(0, delete('Xdir', 'rf'))
|
call assert_equal(0, delete('Xdir', 'rf'))
|
||||||
call assert_false(filereadable('Xdir/foo.txt'))
|
call assert_false(filereadable('Xdir/foo.txt'))
|
||||||
call assert_false(filereadable('Xdir/[a-1]/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
|
endfunc
|
||||||
|
|
||||||
func Test_call()
|
func Test_call()
|
||||||
|
Loading…
Reference in New Issue
Block a user