0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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.
This commit is contained in:
Bram Moolenaar
2021-12-10 20:15:15 +00:00
parent 9fffef9f35
commit f8e9eb8e17
3 changed files with 28 additions and 2 deletions

View File

@@ -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