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));      } | 
