diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-04-03 03:54:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-03 03:54:34 +0200 |
commit | 6afa7d66cd6343c7c0114e6b3e08c592e169df43 (patch) | |
tree | b9bf75bedadd6a00347cd9f4396d159562fb7675 /src/nvim/eval.c | |
parent | ddfa0359c638a4fd5eba5c339dc3e18e2b8aca35 (diff) | |
parent | ae7d8d8ffb86eefa45d8f59834eb0f088e93535d (diff) | |
download | rneovim-6afa7d66cd6343c7c0114e6b3e08c592e169df43.tar.gz rneovim-6afa7d66cd6343c7c0114e6b3e08c592e169df43.tar.bz2 rneovim-6afa7d66cd6343c7c0114e6b3e08c592e169df43.zip |
Merge #6427 from ZyX-I/writefile-allow-omitting-fsync
eval: Make writefile() able to disable fsync()
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index f0d78a2508..7ab07fe6a2 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -17421,16 +17421,24 @@ static void f_writefile(typval_T *argvars, typval_T *rettv, FunPtr fptr) bool binary = false; bool append = false; + bool do_fsync = !!p_fs; if (argvars[2].v_type != VAR_UNKNOWN) { const char *const flags = tv_get_string_chk(&argvars[2]); if (flags == NULL) { return; } - if (strchr(flags, 'b')) { - binary = true; - } - if (strchr(flags, 'a')) { - append = true; + for (const char *p = flags; *p; p++) { + switch (*p) { + case 'b': { binary = true; break; } + case 'a': { append = true; break; } + case 's': { do_fsync = true; break; } + case 'S': { do_fsync = false; break; } + default: { + // Using %s, p and not %c, *p to preserve multibyte characters + emsgf(_("E5060: Unknown flag: %s"), p); + return; + } + } } } @@ -17453,7 +17461,7 @@ static void f_writefile(typval_T *argvars, typval_T *rettv, FunPtr fptr) if (write_list(&fp, argvars[0].vval.v_list, binary)) { rettv->vval.v_number = 0; } - if ((error = file_close(&fp)) != 0) { + if ((error = file_close(&fp, do_fsync)) != 0) { emsgf(_("E80: Error when closing file %s: %s"), fname, os_strerror(error)); } |