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

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)
This commit is contained in:
Bram Moolenaar
2014-11-05 18:06:01 +01:00
parent 4391cf98ec
commit 6b2e938f13
6 changed files with 49 additions and 8 deletions

View File

@@ -1899,8 +1899,12 @@ test1 test2 test3 test4 test5 test6 test7 test8 test9 \
test_insertcount \
test_listlbr \
test_listlbr_utf8 \
test_mapping \
test_options \
test_qf_title \
test_signs \
test_utf8 \
test_writefile \
test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \

View File

@@ -19689,6 +19689,7 @@ f_writefile(argvars, rettv)
typval_T *rettv;
{
int binary = FALSE;
int append = FALSE;
char_u *fname;
FILE *fd;
int ret = 0;
@@ -19704,14 +19705,19 @@ f_writefile(argvars, rettv)
if (argvars[0].vval.v_list == NULL)
return;
if (argvars[2].v_type != VAR_UNKNOWN
&& STRCMP(get_tv_string(&argvars[2]), "b") == 0)
binary = TRUE;
if (argvars[2].v_type != VAR_UNKNOWN)
{
if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL)
binary = TRUE;
if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL)
append = TRUE;
}
/* Always open the file in binary mode, library functions have a mind of
* their own about CR-LF conversion. */
fname = get_tv_string(&argvars[1]);
if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL)
if (*fname == NUL || (fd = mch_fopen((char *)fname,
append ? APPENDBIN : WRITEBIN)) == NULL)
{
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
ret = -1;

View File

@@ -0,0 +1,18 @@
Tests for writefile()
STARTTEST
:source small.vim
:%delete _
:let f = tempname()
:call writefile(["over","written"], f, "b")
:call writefile(["hello","world"], f, "b")
:call writefile(["!", "good"], f, "a")
:call writefile(["morning"], f, "ab")
:call writefile(["", "vimmers"], f, "ab")
:bwipeout!
:$put =readfile(f)
:1 delete _
:w! test.out
:qa!
ENDTEST

View File

@@ -0,0 +1,5 @@
hello
world!
good
morning
vimmers

View File

@@ -741,6 +741,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
503,
/**/
502,
/**/