From c2766246024ad7ae8c36dd96ac7cdc5fcddc4e09 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 10 Aug 2011 13:21:46 +0200 Subject: 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) --- src/mbyte.c | 21 +++++++++++++++++++++ src/proto/mbyte.pro | 1 + src/quickfix.c | 4 ++++ src/testdir/test10.in | 5 ++++- src/version.c | 2 ++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/mbyte.c b/src/mbyte.c index 44d89f79..da97b346 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -837,6 +837,27 @@ bomb_size() return n; } +/* + * 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 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 @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 273, /**/ 272, /**/ -- cgit v1.2.1