0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 7.4.1107

Problem:    Vim can create a directory but not delete it.
Solution:   Add an argument to delete() to make it possible to delete a
            directory, also recursively.
This commit is contained in:
Bram Moolenaar
2016-01-16 21:27:23 +01:00
parent 286eacd3f6
commit da440d21a6
7 changed files with 133 additions and 26 deletions

View File

@@ -8131,7 +8131,7 @@ static struct fst
{"cscope_connection",0,3, f_cscope_connection},
{"cursor", 1, 3, f_cursor},
{"deepcopy", 1, 2, f_deepcopy},
{"delete", 1, 1, f_delete},
{"delete", 1, 2, f_delete},
{"did_filetype", 0, 0, f_did_filetype},
{"diff_filler", 1, 1, f_diff_filler},
{"diff_hlID", 2, 2, f_diff_hlID},
@@ -10391,10 +10391,37 @@ f_delete(argvars, rettv)
typval_T *argvars;
typval_T *rettv;
{
char_u nbuf[NUMBUFLEN];
char_u *name;
char_u *flags;
rettv->vval.v_number = -1;
if (check_restricted() || check_secure())
rettv->vval.v_number = -1;
return;
name = get_tv_string(&argvars[0]);
if (name == NULL || *name == NUL)
{
EMSG(_(e_invarg));
return;
}
if (argvars[1].v_type != VAR_UNKNOWN)
flags = get_tv_string_buf(&argvars[1], nbuf);
else
rettv->vval.v_number = mch_remove(get_tv_string(&argvars[0]));
flags = (char_u *)"";
if (*flags == NUL)
/* delete a file */
rettv->vval.v_number = mch_remove(name) == 0 ? 0 : -1;
else if (STRCMP(flags, "d") == 0)
/* delete an empty directory */
rettv->vval.v_number = mch_rmdir(name) == 0 ? 0 : -1;
else if (STRCMP(flags, "rf") == 0)
/* delete an directory recursively */
rettv->vval.v_number = delete_recursive(name);
else
EMSG2(_(e_invexpr2), flags);
}
/*