summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2011-08-10 13:21:46 +0200
committerBram Moolenaar <bram@vim.org>2011-08-10 13:21:46 +0200
commitc2766246024ad7ae8c36dd96ac7cdc5fcddc4e09 (patch)
tree5fb0ff87c635b752eb15e0b94ba1bc8caddd900b
parent42b1009c311cb33ddf0f7536696126b0600807f3 (diff)
downloadvim-c2766246024ad7ae8c36dd96ac7cdc5fcddc4e09.tar.gz
updated for version 7.3.273v7.3.273v7-3-273
Problem: A BOM in an error file is seen as text. (Aleksey Baibarin) Solution: Remove the BOM from the text before evaluating. (idea by Christian Brabandt)
-rw-r--r--src/mbyte.c21
-rw-r--r--src/proto/mbyte.pro1
-rw-r--r--src/quickfix.c4
-rw-r--r--src/testdir/test10.in5
-rw-r--r--src/version.c2
5 files changed, 32 insertions, 1 deletions
diff --git a/src/mbyte.c b/src/mbyte.c
index 44d89f79..da97b346 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -838,6 +838,27 @@ bomb_size()
}
/*
+ * Remove all BOM from "s" by moving remaining text.
+ */
+ void
+remove_bom(s)
+ char_u *s;
+{
+ if (enc_utf8)
+ {
+ char_u *p = s;
+
+ while ((p = vim_strbyte(p, 0xef)) != NULL)
+ {
+ if (p[1] == 0xbb && p[2] == 0xbf)
+ STRMOVE(p, p + 3);
+ else
+ ++p;
+ }
+ }
+}
+
+/*
* Get class of pointer:
* 0 for blank or NUL
* 1 for punctuation
diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro
index 88496ccf..8c0788c7 100644
--- a/src/proto/mbyte.pro
+++ b/src/proto/mbyte.pro
@@ -2,6 +2,7 @@
int enc_canon_props __ARGS((char_u *name));
char_u *mb_init __ARGS((void));
int bomb_size __ARGS((void));
+void remove_bom __ARGS((char_u *s));
int mb_get_class __ARGS((char_u *p));
int dbcs_class __ARGS((unsigned lead, unsigned trail));
int latin_char2len __ARGS((int c));
diff --git a/src/quickfix.c b/src/quickfix.c
index 999c66ed..17d85837 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -561,6 +561,10 @@ qf_init_ext(qi, efile, buf, tv, errorformat, newlist, lnumfirst, lnumlast,
break;
IObuff[CMDBUFFSIZE - 2] = NUL; /* for very long lines */
+#ifdef FEAT_MBYTE
+ remove_bom(IObuff);
+#endif
+
if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
*efmp = NUL;
#ifdef USE_CRNL
diff --git a/src/testdir/test10.in b/src/testdir/test10.in
index 6d0c721d..0bd6455f 100644
--- a/src/testdir/test10.in
+++ b/src/testdir/test10.in
@@ -2,6 +2,9 @@ Test for 'errorformat'. This will fail if the quickfix feature was disabled.
STARTTEST
:so small.vim
+:" Also test a BOM is ignored.
+:so mbyte.vim
+:set encoding=utf-8
:/start of errorfile/,/end of errorfile/w! Xerrorfile
:/start of testfile/,/end of testfile/w! Xtestfile
:cf Xerrorfile
@@ -20,7 +23,7 @@ ENDTEST
start of errorfile
"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
-"Xtestfile", line 7 col 19; this is an error
+"Xtestfile", line 7 col 19; this is an error
gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
Xtestfile:13: parse error before `asd'
make: *** [vim] Error 1
diff --git a/src/version.c b/src/version.c
index 63c4c8f3..60defc7e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 273,
+/**/
272,
/**/
271,