aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorKunMing Xie <qqzz014@gmail.com>2017-10-08 09:33:20 +0800
committerGitHub <noreply@github.com>2017-10-08 09:33:20 +0800
commit4b2592d7b6c295093b07ac2737658767c3e3377b (patch)
tree7b238e71c98398bb9433f0a48858c3ab3909be39 /src/nvim/eval.c
parentf97ca6b3339ca04477296c834a159d40d2201ccd (diff)
parent032b088c848585e60e8dc1a210f240bad6bb3387 (diff)
downloadrneovim-4b2592d7b6c295093b07ac2737658767c3e3377b.tar.gz
rneovim-4b2592d7b6c295093b07ac2737658767c3e3377b.tar.bz2
rneovim-4b2592d7b6c295093b07ac2737658767c3e3377b.zip
Merge branch 'master' into vim-8.0.0131
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 5ee91d417a..86b99c2783 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -6733,6 +6733,39 @@ static void prepare_assert_error(garray_T *gap)
}
}
+// Append "str" to "gap", escaping unprintable characters.
+// Changes NL to \n, CR to \r, etc.
+static void ga_concat_esc(garray_T *gap, char_u *str)
+{
+ char_u *p;
+ char_u buf[NUMBUFLEN];
+
+ if (str == NULL) {
+ ga_concat(gap, (char_u *)"NULL");
+ return;
+ }
+
+ for (p = str; *p != NUL; p++) {
+ switch (*p) {
+ case BS: ga_concat(gap, (char_u *)"\\b"); break;
+ case ESC: ga_concat(gap, (char_u *)"\\e"); break;
+ case FF: ga_concat(gap, (char_u *)"\\f"); break;
+ case NL: ga_concat(gap, (char_u *)"\\n"); break;
+ case TAB: ga_concat(gap, (char_u *)"\\t"); break;
+ case CAR: ga_concat(gap, (char_u *)"\\r"); break;
+ case '\\': ga_concat(gap, (char_u *)"\\\\"); break;
+ default:
+ if (*p < ' ') {
+ vim_snprintf((char *)buf, NUMBUFLEN, "\\x%02x", *p);
+ ga_concat(gap, buf);
+ } else {
+ ga_append(gap, *p);
+ }
+ break;
+ }
+ }
+}
+
// Fill "gap" with information about an assert error.
static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
char_u *exp_str, typval_T *exp_tv,
@@ -6753,11 +6786,11 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
ga_concat(gap, (char_u *)"Expected ");
}
if (exp_str == NULL) {
- tofree = (char_u *) encode_tv2string(exp_tv, NULL);
- ga_concat(gap, tofree);
+ tofree = (char_u *)encode_tv2string(exp_tv, NULL);
+ ga_concat_esc(gap, tofree);
xfree(tofree);
} else {
- ga_concat(gap, exp_str);
+ ga_concat_esc(gap, exp_str);
}
if (atype != ASSERT_NOTEQUAL) {
if (atype == ASSERT_MATCH) {
@@ -6768,7 +6801,7 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
ga_concat(gap, (char_u *)" but got ");
}
tofree = (char_u *)encode_tv2string(got_tv, NULL);
- ga_concat(gap, tofree);
+ ga_concat_esc(gap, tofree);
xfree(tofree);
}
}