summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.3.336
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.336')
-rw-r--r--source/ap/vim/patches/7.3.3361100
1 files changed, 1100 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.336 b/source/ap/vim/patches/7.3.336
new file mode 100644
index 00000000..902f578c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.336
@@ -0,0 +1,1100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.336
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.336
+Problem: When a tags file specifies an encoding different from 'enc' it
+ may hang and using a pattern doesn't work.
+Solution: Convert the whole line. Continue reading the header after the
+ SORT tag. Add test83. (Yukihiro Nakadaira)
+Files: src/tag.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile,
+ src/testdir/test83-tags2, src/testdir/test83-tags3,
+ src/testdir/test83.in, src/testdir/test83.ok
+
+
+*** ../vim-7.3.335/src/tag.c 2011-04-11 21:35:03.000000000 +0200
+--- src/tag.c 2011-10-12 19:51:04.000000000 +0200
+***************
+*** 1277,1282 ****
+--- 1277,1283 ----
+ {
+ FILE *fp;
+ char_u *lbuf; /* line buffer */
++ int lbuf_size = LSIZE; /* length of lbuf */
+ char_u *tag_fname; /* name of tag file */
+ tagname_T tn; /* info for get_tagfname() */
+ int first_file; /* trying first tag file */
+***************
+*** 1291,1296 ****
+--- 1292,1298 ----
+ char_u *s;
+ int i;
+ #ifdef FEAT_TAG_BINS
++ int tag_file_sorted = NUL; /* !_TAG_FILE_SORTED value */
+ struct tag_search_info /* Binary search file offsets */
+ {
+ off_t low_offset; /* offset for first char of first line that
+***************
+*** 1360,1372 ****
+ char_u *saved_pat = NULL; /* copy of pat[] */
+ #endif
+
+- /* Use two sets of variables for the pattern: "orgpat" holds the values
+- * for the original pattern and "convpat" converted from 'encoding' to
+- * encoding of the tags file. "pats" point to either one of these. */
+- pat_T *pats;
+ pat_T orgpat; /* holds unconverted pattern info */
+ #ifdef FEAT_MBYTE
+- pat_T convpat; /* holds converted pattern info */
+ vimconv_T vimconv;
+ #endif
+
+--- 1362,1369 ----
+***************
+*** 1390,1396 ****
+
+ help_save = curbuf->b_help;
+ orgpat.pat = pat;
+- pats = &orgpat;
+ #ifdef FEAT_MBYTE
+ vimconv.vc_type = CONV_NONE;
+ #endif
+--- 1387,1392 ----
+***************
+*** 1398,1404 ****
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(LSIZE);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+--- 1394,1400 ----
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(lbuf_size);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+***************
+*** 1424,1453 ****
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! pats->len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (pats->len > 3 && pat[pats->len - 3] == '@'
+! && ASCII_ISALPHA(pat[pats->len - 2])
+! && ASCII_ISALPHA(pat[pats->len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, pats->len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[pats->len - 2];
+! pats->pat = saved_pat;
+! pats->len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && pats->len > p_tl) /* adjust for 'taglength' */
+! pats->len = p_tl;
+
+! prepare_pats(pats, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+--- 1420,1449 ----
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! orgpat.len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
+! && ASCII_ISALPHA(pat[orgpat.len - 2])
+! && ASCII_ISALPHA(pat[orgpat.len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, orgpat.len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[orgpat.len - 2];
+! orgpat.pat = saved_pat;
+! orgpat.len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && orgpat.len > p_tl) /* adjust for 'taglength' */
+! orgpat.len = p_tl;
+
+! prepare_pats(&orgpat, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+***************
+*** 1466,1478 ****
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! pats->regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || pats->headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (pats->headlen == 0 || !p_tbs || round == 2);
+ #else
+! pats->regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+--- 1462,1474 ----
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! orgpat.regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || orgpat.headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
+ #else
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+***************
+*** 1701,1706 ****
+--- 1697,1732 ----
+ }
+ line_read_in:
+
++ #ifdef FEAT_MBYTE
++ if (vimconv.vc_type != CONV_NONE)
++ {
++ char_u *conv_line;
++ int len;
++
++ /* Convert every line. Converting the pattern from 'enc' to
++ * the tags file encoding doesn't work, because characters are
++ * not recognized. */
++ conv_line = string_convert(&vimconv, lbuf, NULL);
++ if (conv_line != NULL)
++ {
++ /* Copy or swap lbuf and conv_line. */
++ len = (int)STRLEN(conv_line) + 1;
++ if (len > lbuf_size)
++ {
++ vim_free(lbuf);
++ lbuf = conv_line;
++ lbuf_size = len;
++ }
++ else
++ {
++ STRCPY(lbuf, conv_line);
++ vim_free(conv_line);
++ }
++ }
++ }
++ #endif
++
++
+ #ifdef FEAT_EMACS_TAGS
+ /*
+ * Emacs tags line with CTRL-L: New file name on next line.
+***************
+*** 1770,1775 ****
+--- 1796,1828 ----
+ */
+ if (state == TS_START)
+ {
++ if (STRNCMP(lbuf, "!_TAG_", 6) <= 0)
++ {
++ /*
++ * Read header line.
++ */
++ #ifdef FEAT_TAG_BINS
++ if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
++ tag_file_sorted = lbuf[18];
++ #endif
++ #ifdef FEAT_MBYTE
++ if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
++ {
++ /* Prepare to convert every line from the specified
++ * encoding to 'encoding'. */
++ for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
++ ;
++ *p = NUL;
++ convert_setup(&vimconv, lbuf + 20, p_enc);
++ }
++ #endif
++
++ /* Read the next line. Unrecognized flags are ignored. */
++ continue;
++ }
++
++ /* Headers ends. */
++
+ #ifdef FEAT_TAG_BINS
+ /*
+ * When there is no tag head, or ignoring case, need to do a
+***************
+*** 1786,1809 ****
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
+ state = TS_BINARY;
+! else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+! {
+! /* Check sorted flag */
+! if (lbuf[18] == '1')
+ state = TS_BINARY;
+! else if (lbuf[18] == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! pats->regmatch.rm_ic = (p_ic || !noic);
+! }
+! else
+! state = TS_LINEAR;
+ }
+
+! if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+--- 1839,1858 ----
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (tag_file_sorted == NUL)
+ state = TS_BINARY;
+! else if (tag_file_sorted == '1')
+ state = TS_BINARY;
+! else if (tag_file_sorted == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ }
++ else
++ state = TS_LINEAR;
+
+! if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+***************
+*** 1843,1882 ****
+ #endif
+ }
+
+- #ifdef FEAT_MBYTE
+- if (lbuf[0] == '!' && pats == &orgpat
+- && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+- {
+- /* Convert the search pattern from 'encoding' to the
+- * specified encoding. */
+- for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+- ;
+- *p = NUL;
+- convert_setup(&vimconv, p_enc, lbuf + 20);
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- convpat.pat = string_convert(&vimconv, pats->pat, NULL);
+- if (convpat.pat != NULL)
+- {
+- pats = &convpat;
+- pats->len = (int)STRLEN(pats->pat);
+- prepare_pats(pats, has_re);
+- pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
+- }
+- }
+-
+- /* Prepare for converting a match the other way around. */
+- convert_setup(&vimconv, lbuf + 20, p_enc);
+- continue;
+- }
+- #endif
+-
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (pats->headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+--- 1892,1903 ----
+ #endif
+ }
+
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (orgpat.headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+***************
+*** 1933,1941 ****
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && pats->headlen < cmplen)
+! cmplen = pats->headlen;
+! else if (state == TS_LINEAR && pats->headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+--- 1954,1962 ----
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && orgpat.headlen < cmplen)
+! cmplen = orgpat.headlen;
+! else if (state == TS_LINEAR && orgpat.headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+***************
+*** 1954,1963 ****
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+--- 1975,1984 ----
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+***************
+*** 1965,1973 ****
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < pats->headlen)
+ tagcmp = -1;
+! else if (cmplen > pats->headlen)
+ tagcmp = 1;
+ }
+
+--- 1986,1994 ----
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < orgpat.headlen)
+ tagcmp = -1;
+! else if (cmplen > orgpat.headlen)
+ tagcmp = 1;
+ }
+
+***************
+*** 2011,2017 ****
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+--- 2032,2038 ----
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+***************
+*** 2021,2027 ****
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+--- 2042,2048 ----
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+***************
+*** 2032,2038 ****
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ continue;
+
+ /*
+--- 2053,2059 ----
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ continue;
+
+ /*
+***************
+*** 2083,2123 ****
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (pats->len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (pats->regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && pats->regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
+! if (pats->regmatch.rm_ic)
+ {
+! pats->regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+ (colnr_T)0);
+! pats->regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+--- 2104,2144 ----
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (orgpat.len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (orgpat.regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && orgpat.regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
+! if (orgpat.regmatch.rm_ic)
+ {
+! orgpat.regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
+ (colnr_T)0);
+! orgpat.regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+***************
+*** 2174,2180 ****
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (pats->regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+--- 2195,2201 ----
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (orgpat.regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+***************
+*** 2187,2221 ****
+ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
+- #ifdef FEAT_MBYTE
+- char_u *conv_line = NULL;
+- char_u *lbuf_line = lbuf;
+-
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- /* Convert the tag line from the encoding of the tags
+- * file to 'encoding'. Then parse the line again. */
+- conv_line = string_convert(&vimconv, lbuf, NULL);
+- if (conv_line != NULL)
+- {
+- if (parse_tag_line(conv_line,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp) == OK)
+- lbuf_line = conv_line;
+- else
+- /* doesn't work, go back to unconverted line. */
+- (void)parse_tag_line(lbuf,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp);
+- }
+- }
+- #else
+- # define lbuf_line lbuf
+- #endif
+ if (help_only)
+ {
+ #ifdef FEAT_MULTI_LANG
+--- 2208,2213 ----
+***************
+*** 2307,2313 ****
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf_line) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+--- 2299,2305 ----
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+***************
+*** 2337,2343 ****
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf_line);
+ }
+ }
+
+--- 2329,2335 ----
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf);
+ }
+ }
+
+***************
+*** 2373,2382 ****
+ else
+ vim_free(mfp);
+ }
+- #ifdef FEAT_MBYTE
+- /* Note: this makes the values in "tagp" invalid! */
+- vim_free(conv_line);
+- #endif
+ }
+ else /* Out of memory! Just forget about the rest. */
+ {
+--- 2365,2370 ----
+***************
+*** 2415,2433 ****
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+- if (pats == &convpat)
+- {
+- /* Go back from converted pattern to original pattern. */
+- vim_free(pats->pat);
+- vim_free(pats->regmatch.regprog);
+- orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
+- pats = &orgpat;
+- }
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+--- 2403,2414 ----
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
++ tag_file_sorted = NUL;
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+***************
+*** 2461,2473 ****
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! pats->regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+--- 2442,2454 ----
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! orgpat.regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+***************
+*** 2480,2486 ****
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(pats->regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+--- 2461,2467 ----
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(orgpat.regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+*** ../vim-7.3.335/src/testdir/Make_amiga.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-10-12 19:21:00.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 131,133 ****
+--- 131,134 ----
+ test80.out: test80.in
+ test81.out: test81.in
+ test82.out: test82.in
++ test83.out: test83.in
+*** ../vim-7.3.335/src/testdir/Make_dos.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_ming.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_os2.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.335/src/testdir/Make_vms.mms 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 76,82 ****
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 76,82 ----
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.335/src/testdir/Makefile 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Makefile 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 72,78 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 72,78 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../vim-7.3.335/src/testdir/test83-tags2 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags2 2011-10-12 19:34:15.000000000 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ !_TAG_FILE_ENCODING cp932 //
++ ‚`‚a‚b Xtags2.txt /‚`‚a‚b
+*** ../vim-7.3.335/src/testdir/test83-tags3 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags3 2011-10-12 19:35:42.000000000 +0200
+***************
+*** 0 ****
+--- 1,102 ----
++ !_TAG_FILE_SORTED 1 //
++ !_TAG_FILE_ENCODING cp932 //
++ abc1 Xtags3.txt /‚`‚a‚b
++ abc2 Xtags3.txt /‚`‚a‚b
++ abc3 Xtags3.txt /‚`‚a‚b
++ abc4 Xtags3.txt /‚`‚a‚b
++ abc5 Xtags3.txt /‚`‚a‚b
++ abc6 Xtags3.txt /‚`‚a‚b
++ abc7 Xtags3.txt /‚`‚a‚b
++ abc8 Xtags3.txt /‚`‚a‚b
++ abc9 Xtags3.txt /‚`‚a‚b
++ abc10 Xtags3.txt /‚`‚a‚b
++ abc11 Xtags3.txt /‚`‚a‚b
++ abc12 Xtags3.txt /‚`‚a‚b
++ abc13 Xtags3.txt /‚`‚a‚b
++ abc14 Xtags3.txt /‚`‚a‚b
++ abc15 Xtags3.txt /‚`‚a‚b
++ abc16 Xtags3.txt /‚`‚a‚b
++ abc17 Xtags3.txt /‚`‚a‚b
++ abc18 Xtags3.txt /‚`‚a‚b
++ abc19 Xtags3.txt /‚`‚a‚b
++ abc20 Xtags3.txt /‚`‚a‚b
++ abc21 Xtags3.txt /‚`‚a‚b
++ abc22 Xtags3.txt /‚`‚a‚b
++ abc23 Xtags3.txt /‚`‚a‚b
++ abc24 Xtags3.txt /‚`‚a‚b
++ abc25 Xtags3.txt /‚`‚a‚b
++ abc26 Xtags3.txt /‚`‚a‚b
++ abc27 Xtags3.txt /‚`‚a‚b
++ abc28 Xtags3.txt /‚`‚a‚b
++ abc29 Xtags3.txt /‚`‚a‚b
++ abc30 Xtags3.txt /‚`‚a‚b
++ abc31 Xtags3.txt /‚`‚a‚b
++ abc32 Xtags3.txt /‚`‚a‚b
++ abc33 Xtags3.txt /‚`‚a‚b
++ abc34 Xtags3.txt /‚`‚a‚b
++ abc35 Xtags3.txt /‚`‚a‚b
++ abc36 Xtags3.txt /‚`‚a‚b
++ abc37 Xtags3.txt /‚`‚a‚b
++ abc38 Xtags3.txt /‚`‚a‚b
++ abc39 Xtags3.txt /‚`‚a‚b
++ abc40 Xtags3.txt /‚`‚a‚b
++ abc41 Xtags3.txt /‚`‚a‚b
++ abc42 Xtags3.txt /‚`‚a‚b
++ abc43 Xtags3.txt /‚`‚a‚b
++ abc44 Xtags3.txt /‚`‚a‚b
++ abc45 Xtags3.txt /‚`‚a‚b
++ abc46 Xtags3.txt /‚`‚a‚b
++ abc47 Xtags3.txt /‚`‚a‚b
++ abc48 Xtags3.txt /‚`‚a‚b
++ abc49 Xtags3.txt /‚`‚a‚b
++ abc50 Xtags3.txt /‚`‚a‚b
++ abc51 Xtags3.txt /‚`‚a‚b
++ abc52 Xtags3.txt /‚`‚a‚b
++ abc53 Xtags3.txt /‚`‚a‚b
++ abc54 Xtags3.txt /‚`‚a‚b
++ abc55 Xtags3.txt /‚`‚a‚b
++ abc56 Xtags3.txt /‚`‚a‚b
++ abc57 Xtags3.txt /‚`‚a‚b
++ abc58 Xtags3.txt /‚`‚a‚b
++ abc59 Xtags3.txt /‚`‚a‚b
++ abc60 Xtags3.txt /‚`‚a‚b
++ abc61 Xtags3.txt /‚`‚a‚b
++ abc62 Xtags3.txt /‚`‚a‚b
++ abc63 Xtags3.txt /‚`‚a‚b
++ abc64 Xtags3.txt /‚`‚a‚b
++ abc65 Xtags3.txt /‚`‚a‚b
++ abc66 Xtags3.txt /‚`‚a‚b
++ abc67 Xtags3.txt /‚`‚a‚b
++ abc68 Xtags3.txt /‚`‚a‚b
++ abc69 Xtags3.txt /‚`‚a‚b
++ abc70 Xtags3.txt /‚`‚a‚b
++ abc71 Xtags3.txt /‚`‚a‚b
++ abc72 Xtags3.txt /‚`‚a‚b
++ abc73 Xtags3.txt /‚`‚a‚b
++ abc74 Xtags3.txt /‚`‚a‚b
++ abc75 Xtags3.txt /‚`‚a‚b
++ abc76 Xtags3.txt /‚`‚a‚b
++ abc77 Xtags3.txt /‚`‚a‚b
++ abc78 Xtags3.txt /‚`‚a‚b
++ abc79 Xtags3.txt /‚`‚a‚b
++ abc80 Xtags3.txt /‚`‚a‚b
++ abc81 Xtags3.txt /‚`‚a‚b
++ abc82 Xtags3.txt /‚`‚a‚b
++ abc83 Xtags3.txt /‚`‚a‚b
++ abc84 Xtags3.txt /‚`‚a‚b
++ abc85 Xtags3.txt /‚`‚a‚b
++ abc86 Xtags3.txt /‚`‚a‚b
++ abc87 Xtags3.txt /‚`‚a‚b
++ abc88 Xtags3.txt /‚`‚a‚b
++ abc89 Xtags3.txt /‚`‚a‚b
++ abc90 Xtags3.txt /‚`‚a‚b
++ abc91 Xtags3.txt /‚`‚a‚b
++ abc92 Xtags3.txt /‚`‚a‚b
++ abc93 Xtags3.txt /‚`‚a‚b
++ abc94 Xtags3.txt /‚`‚a‚b
++ abc95 Xtags3.txt /‚`‚a‚b
++ abc96 Xtags3.txt /‚`‚a‚b
++ abc97 Xtags3.txt /‚`‚a‚b
++ abc98 Xtags3.txt /‚`‚a‚b
++ abc99 Xtags3.txt /‚`‚a‚b
++ abc100 Xtags3.txt /‚`‚a‚b
+*** ../vim-7.3.335/src/testdir/test83.in 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.in 2011-10-12 19:40:47.000000000 +0200
+***************
+*** 0 ****
+--- 1,76 ----
++ Tests for tag search with !_TAG_FILE_ENCODING.
++
++ STARTTEST
++ :so mbyte.vim
++ :if !has('iconv')
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set enc=utf8
++
++ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
++ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
++ :/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
++ :/^tags1$/+1,/^tags1-end$/-1w! Xtags1
++
++ ggdG
++
++ :call setline('.', 'Results of test83')
++
++ :" case1:
++ :new
++ :set tags=Xtags1
++ :let v:errmsg = ''
++ :tag abcdefghijklmnopqrs
++ :if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
++ : close
++ : put ='case1: failed'
++ :else
++ : close
++ : put ='case1: ok'
++ :endif
++
++ :" case2:
++ :new
++ :set tags=test83-tags2
++ :let v:errmsg = ''
++ :tag /.BC
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case2: failed'
++ :else
++ : close
++ : put ='case2: ok'
++ :endif
++
++ :" case3:
++ :new
++ :set tags=test83-tags3
++ :let v:errmsg = ''
++ :tag abc50
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case3: failed'
++ :else
++ : close
++ : put ='case3: ok'
++ :endif
++ :close
++
++ :wq! test.out
++ ENDTEST
++
++ text for tags1
++ abcdefghijklmnopqrs
++
++ text for tags2
++ ABC
++
++ text for tags3
++ ABC
++
++ tags1
++ !_TAG_FILE_ENCODING utf-8 //
++ abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs
++ tags1-end
+*** ../vim-7.3.335/src/testdir/test83.ok 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.ok 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ Results of test83
++ case1: ok
++ case2: ok
++ case3: ok
+*** ../vim-7.3.335/src/version.c 2011-10-12 16:57:07.000000000 +0200
+--- src/version.c 2011-10-12 19:45:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 336,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+62. If your doorbell rings, you think that new mail has arrived. And then
+ you're disappointed that it's only someone at the door.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///