diff src/tag.c @ 26492:08e3eee541ac v8.2.3776

patch 8.2.3776: when a tags file line is long a tag may not be found Commit: https://github.com/vim/vim/commit/f8e9eb8e173bf0ff9560192ae888941ef8302269 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Dec 10 20:15:15 2021 +0000 patch 8.2.3776: when a tags file line is long a tag may not be found Problem: When a tags file line is long a tag may not be found. Solution: When increasing the buffer size read the same line again.
author Bram Moolenaar <Bram@vim.org>
date Fri, 10 Dec 2021 21:30:03 +0100
parents 65b4109a4297
children 13ba00ef7687
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -2011,8 +2011,6 @@ find_tags(
 		eof = vim_fgets(lbuf, lbuf_size, fp);
 		if (!eof && search_info.curr_offset != 0)
 		{
-		    // The explicit cast is to work around a bug in gcc 3.4.2
-		    // (repeated below).
 		    search_info.curr_offset = vim_ftell(fp);
 		    if (search_info.curr_offset == search_info.high_offset)
 		    {
@@ -2052,7 +2050,10 @@ find_tags(
 			eof = cs_fgets(lbuf, lbuf_size);
 		    else
 #endif
+		    {
+			search_info.curr_offset = vim_ftell(fp);
 			eof = vim_fgets(lbuf, lbuf_size, fp);
+		    }
 		} while (!eof && vim_isblankline(lbuf));
 
 		if (eof)
@@ -2294,6 +2295,10 @@ parse_line:
 		lbuf = alloc(lbuf_size);
 		if (lbuf == NULL)
 		    goto findtag_end;
+
+		if (state == TS_STEP_FORWARD)
+		    // Seek to the same position to read the same line again
+		    vim_fseek(fp, search_info.curr_offset, SEEK_SET);
 #ifdef FEAT_TAG_BINS
 		// this will try the same thing again, make sure the offset is
 		// different