comparison src/eval.c @ 6341:094a87e76155 v7.4.503

updated for version 7.4.503 Problem: Cannot append a list of lines to a file. Solution: Add the append option to writefile(). (Yasuhiro Matsumoto)
author Bram Moolenaar <bram@vim.org>
date Wed, 05 Nov 2014 18:06:01 +0100
parents 65e72747feca
children 6ad9facba57d
comparison
equal deleted inserted replaced
6340:a72bf2c39633 6341:094a87e76155
19687 f_writefile(argvars, rettv) 19687 f_writefile(argvars, rettv)
19688 typval_T *argvars; 19688 typval_T *argvars;
19689 typval_T *rettv; 19689 typval_T *rettv;
19690 { 19690 {
19691 int binary = FALSE; 19691 int binary = FALSE;
19692 int append = FALSE;
19692 char_u *fname; 19693 char_u *fname;
19693 FILE *fd; 19694 FILE *fd;
19694 int ret = 0; 19695 int ret = 0;
19695 19696
19696 if (check_restricted() || check_secure()) 19697 if (check_restricted() || check_secure())
19702 return; 19703 return;
19703 } 19704 }
19704 if (argvars[0].vval.v_list == NULL) 19705 if (argvars[0].vval.v_list == NULL)
19705 return; 19706 return;
19706 19707
19707 if (argvars[2].v_type != VAR_UNKNOWN 19708 if (argvars[2].v_type != VAR_UNKNOWN)
19708 && STRCMP(get_tv_string(&argvars[2]), "b") == 0) 19709 {
19709 binary = TRUE; 19710 if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL)
19711 binary = TRUE;
19712 if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL)
19713 append = TRUE;
19714 }
19710 19715
19711 /* Always open the file in binary mode, library functions have a mind of 19716 /* Always open the file in binary mode, library functions have a mind of
19712 * their own about CR-LF conversion. */ 19717 * their own about CR-LF conversion. */
19713 fname = get_tv_string(&argvars[1]); 19718 fname = get_tv_string(&argvars[1]);
19714 if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL) 19719 if (*fname == NUL || (fd = mch_fopen((char *)fname,
19720 append ? APPENDBIN : WRITEBIN)) == NULL)
19715 { 19721 {
19716 EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname); 19722 EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
19717 ret = -1; 19723 ret = -1;
19718 } 19724 }
19719 else 19725 else