aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-02-14 19:40:16 +0300
committerZyX <kp-pav@yandex.ru>2017-02-14 19:40:16 +0300
commit066e6b8e9b221df4718accf4aef88142f51eae99 (patch)
tree95caa81dcd984568033a472ddbc600ee5b54daef
parent2e179214b84c9a4ba7661dd5e3971c3dc034f29f (diff)
downloadrneovim-066e6b8e9b221df4718accf4aef88142f51eae99.tar.gz
rneovim-066e6b8e9b221df4718accf4aef88142f51eae99.tar.bz2
rneovim-066e6b8e9b221df4718accf4aef88142f51eae99.zip
eval: Return immediately after an error in write_list()
Previously it could attempt to write trailing newline before returning.
-rw-r--r--src/nvim/eval.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 94eee0edf0..941f4cd93a 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -18031,8 +18031,8 @@ static void f_winsaveview(typval_T *argvars, typval_T *rettv, FunPtr fptr)
static bool write_list(FileDescriptor *const fp, const list_T *const list,
const bool binary)
{
+ int error = 0;
for (const listitem_T *li = list->lv_first; li != NULL; li = li->li_next) {
- int error = 0;
const char *const s = (const char *)get_tv_string((typval_T *)&li->li_tv);
const char *hunk_start = s;
for (const char *p = hunk_start;; p++) {
@@ -18042,7 +18042,7 @@ static bool write_list(FileDescriptor *const fp, const list_T *const list,
(size_t)(p - hunk_start));
if (written < 0) {
error = (int)written;
- break;
+ goto write_list_error;
}
}
if (*p == NUL) {
@@ -18061,14 +18061,14 @@ static bool write_list(FileDescriptor *const fp, const list_T *const list,
const ptrdiff_t written = file_write(fp, "\n", 1);
if (written < 0) {
error = (int)written;
+ goto write_list_error;
}
}
- if (error != 0) {
- emsgf(_("E80: Error while writing: %s"), os_strerror(error));
- return false;
- }
}
return true;
+write_list_error:
+ emsgf(_("E80: Error while writing: %s"), os_strerror(error));
+ return false;
}
/// Saves a typval_T as a string.