Loading ...
Sorry, an error occurred while loading the content.
 

Patch 7.3.336

Expand Messages
  • Bram Moolenaar
    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
    Message 1 of 1 , Oct 12, 2011
      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@... -- 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 ///

      --
      You received this message from the "vim_dev" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php
    Your message has been successfully submitted and would be delivered to recipients shortly.