changeset 18315:6e8b7c58c526 v8.1.2152

patch 8.1.2152: problems navigating tags file on MacOS Catalina Commit: https://github.com/vim/vim/commit/27fc8cab227e30f649f52e74efd58ad56d21e9bb Author: Bram Moolenaar <Bram@vim.org> Date: Tue Oct 15 22:23:37 2019 +0200 patch 8.1.2152: problems navigating tags file on MacOS Catalina Problem: Problems navigating tags file on MacOS Catalina. Solution: Use fseek instead of lseek. (John Lamb, fixes https://github.com/vim/vim/issues/5061)
author Bram Moolenaar <Bram@vim.org>
date Tue, 15 Oct 2019 22:30:04 +0200
parents 27e0efc17757
children 6c8a3a02b533
files src/tag.c src/version.c
diffstat 2 files changed, 14 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -2198,23 +2198,23 @@ line_read_in:
 #endif
 
 #ifdef FEAT_TAG_BINS
-		/*
-		 * When starting a binary search, get the size of the file and
-		 * compute the first offset.
-		 */
+		// When starting a binary search, get the size of the file and
+		// compute the first offset.
 		if (state == TS_BINARY)
 		{
-		    /* Get the tag file size (don't use mch_fstat(), it's not
-		     * portable). */
-		    if ((filesize = vim_lseek(fileno(fp),
-						   (off_T)0L, SEEK_END)) <= 0)
+		    if (vim_fseek(fp, 0L, SEEK_END) != 0)
+			// can't seek, don't use binary search
 			state = TS_LINEAR;
 		    else
 		    {
-			vim_lseek(fileno(fp), (off_T)0L, SEEK_SET);
-
-			/* Calculate the first read offset in the file.  Start
-			 * the search in the middle of the file. */
+			// Get the tag file size (don't use mch_fstat(), it's
+			// not portable).  Don't use lseek(), it doesn't work
+			// properly on MacOS Catalina.
+			filesize = vim_ftell(fp);
+			vim_fseek(fp, 0L, SEEK_SET);
+
+			// Calculate the first read offset in the file.  Start
+			// the search in the middle of the file.
 			search_info.low_offset = 0;
 			search_info.low_char = 0;
 			search_info.high_offset = filesize;
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2152,
+/**/
     2151,
 /**/
     2150,