changeset 3002:7d4e5e31d8c1 v7.3.273

updated for version 7.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)
author Bram Moolenaar <bram@vim.org>
date Wed, 10 Aug 2011 13:21:46 +0200
parents f6729327ecaf
children eb0253baa1ee
files src/mbyte.c src/proto/mbyte.pro src/quickfix.c src/testdir/test10.in src/version.c
diffstat 5 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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));
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -561,6 +561,10 @@ qf_init_ext(qi, efile, buf, tv, errorfor
 	    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
--- a/src/testdir/test10.in
+++ b/src/testdir/test10.in
@@ -2,6 +2,9 @@ Test for 'errorformat'.  This will fail 
 
 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
--- 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,