Mercurial > vim
comparison src/eval.c @ 7615:228ff048db20 v7.4.1107
commit https://github.com/vim/vim/commit/da440d21a6b94d7f525fa7be9b1417c78dd9aa4c
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 16 21:27:23 2016 +0100
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 16 Jan 2016 21:30:05 +0100 |
parents | 9c420b8db435 |
children | d9ec7d22494d |
comparison
equal
deleted
inserted
replaced
7614:427b35579737 | 7615:228ff048db20 |
---|---|
8129 #endif | 8129 #endif |
8130 {"count", 2, 4, f_count}, | 8130 {"count", 2, 4, f_count}, |
8131 {"cscope_connection",0,3, f_cscope_connection}, | 8131 {"cscope_connection",0,3, f_cscope_connection}, |
8132 {"cursor", 1, 3, f_cursor}, | 8132 {"cursor", 1, 3, f_cursor}, |
8133 {"deepcopy", 1, 2, f_deepcopy}, | 8133 {"deepcopy", 1, 2, f_deepcopy}, |
8134 {"delete", 1, 1, f_delete}, | 8134 {"delete", 1, 2, f_delete}, |
8135 {"did_filetype", 0, 0, f_did_filetype}, | 8135 {"did_filetype", 0, 0, f_did_filetype}, |
8136 {"diff_filler", 1, 1, f_diff_filler}, | 8136 {"diff_filler", 1, 1, f_diff_filler}, |
8137 {"diff_hlID", 2, 2, f_diff_hlID}, | 8137 {"diff_hlID", 2, 2, f_diff_hlID}, |
8138 {"empty", 1, 1, f_empty}, | 8138 {"empty", 1, 1, f_empty}, |
8139 {"escape", 2, 2, f_escape}, | 8139 {"escape", 2, 2, f_escape}, |
10389 static void | 10389 static void |
10390 f_delete(argvars, rettv) | 10390 f_delete(argvars, rettv) |
10391 typval_T *argvars; | 10391 typval_T *argvars; |
10392 typval_T *rettv; | 10392 typval_T *rettv; |
10393 { | 10393 { |
10394 char_u nbuf[NUMBUFLEN]; | |
10395 char_u *name; | |
10396 char_u *flags; | |
10397 | |
10398 rettv->vval.v_number = -1; | |
10394 if (check_restricted() || check_secure()) | 10399 if (check_restricted() || check_secure()) |
10395 rettv->vval.v_number = -1; | 10400 return; |
10401 | |
10402 name = get_tv_string(&argvars[0]); | |
10403 if (name == NULL || *name == NUL) | |
10404 { | |
10405 EMSG(_(e_invarg)); | |
10406 return; | |
10407 } | |
10408 | |
10409 if (argvars[1].v_type != VAR_UNKNOWN) | |
10410 flags = get_tv_string_buf(&argvars[1], nbuf); | |
10396 else | 10411 else |
10397 rettv->vval.v_number = mch_remove(get_tv_string(&argvars[0])); | 10412 flags = (char_u *)""; |
10413 | |
10414 if (*flags == NUL) | |
10415 /* delete a file */ | |
10416 rettv->vval.v_number = mch_remove(name) == 0 ? 0 : -1; | |
10417 else if (STRCMP(flags, "d") == 0) | |
10418 /* delete an empty directory */ | |
10419 rettv->vval.v_number = mch_rmdir(name) == 0 ? 0 : -1; | |
10420 else if (STRCMP(flags, "rf") == 0) | |
10421 /* delete an directory recursively */ | |
10422 rettv->vval.v_number = delete_recursive(name); | |
10423 else | |
10424 EMSG2(_(e_invexpr2), flags); | |
10398 } | 10425 } |
10399 | 10426 |
10400 /* | 10427 /* |
10401 * "did_filetype()" function | 10428 * "did_filetype()" function |
10402 */ | 10429 */ |