]> granicus.if.org Git - vim/commitdiff
patch 7.4.1938 v7.4.1938
authorBram Moolenaar <Bram@vim.org>
Tue, 14 Jun 2016 21:02:46 +0000 (23:02 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 14 Jun 2016 21:02:46 +0000 (23:02 +0200)
Problem:    When writing viminfo numbered marks were duplicated.
Solution:   Check for duplicates between current numbered marks and the ones
            read from viminfo.

src/mark.c
src/version.c

index 008a0d0feca6f6958723902bcddcaacce3faa8bf..5e2ac55071f80e525d5d3ad0faad16f9dfb4d557 100644 (file)
@@ -1674,13 +1674,29 @@ write_viminfo_filemarks(FILE *fp)
     idx = NMARKS;
     for (i = NMARKS; i < NMARKS + EXTRA_MARKS; i++)
     {
-       if (vi_namedfm != NULL
-               && vi_namedfm[vi_idx].fmark.mark.lnum != 0
-               && (vi_namedfm[vi_idx].time_set > namedfm[idx].time_set
+       xfmark_T *vi_fm = vi_namedfm != NULL ? &vi_namedfm[vi_idx] : NULL;
+
+       if (vi_fm != NULL
+               && vi_fm->fmark.mark.lnum != 0
+               && (vi_fm->time_set > namedfm[idx].time_set
                    || namedfm[idx].fmark.mark.lnum == 0))
-           fm = &vi_namedfm[vi_idx++];
+       {
+           fm = vi_fm;
+           ++vi_idx;
+       }
        else
+       {
            fm = &namedfm[idx++];
+           if (vi_fm != NULL
+                 && vi_fm->fmark.mark.lnum == fm->fmark.mark.lnum
+                 && vi_fm->time_set == fm->time_set
+                 && ((vi_fm->fmark.fnum != 0
+                         && vi_fm->fmark.fnum == fm->fmark.fnum)
+                     || (vi_fm->fname != NULL
+                         && fm->fname != NULL
+                         && STRCMP(vi_fm->fname, fm->fname) == 0)))
+               ++vi_idx;  /* skip duplicate */
+       }
        write_one_filemark(fp, fm, '\'', i - NMARKS + '0');
     }
 
index 2cdd14245fad224777efee5e3c1e8be91d6e2dc2..1a2b1f3c26531465d2ad1d40a55ba29635ceb22a 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1938,
 /**/
     1937,
 /**/