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 */