]> granicus.if.org Git - vim/commitdiff
patch 8.1.2152: problems navigating tags file on MacOS Catalina v8.1.2152
authorBram Moolenaar <Bram@vim.org>
Tue, 15 Oct 2019 20:23:37 +0000 (22:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 15 Oct 2019 20:23:37 +0000 (22:23 +0200)
Problem:    Problems navigating tags file on MacOS Catalina.
Solution:   Use fseek instead of lseek. (John Lamb, fixes #5061)

src/tag.c
src/version.c

index 284f2c1a0239d2a0627a344e25876aa4e693fbd2..75ff026c557b9432c20f700ecfabdac57640bb39 100644 (file)
--- 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;
index c1c3442164c3d746229e6e40a29778332b4d781a..e21f5c468bc7f7f480cfddafb78127dc68feb93c 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2152,
 /**/
     2151,
 /**/