changeset 9311:7a6f64de57d5 v7.4.1938

commit https://github.com/vim/vim/commit/36f0f0686ca313ef7b76387378cd5dc7acea1924 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 14 23:02:46 2016 +0200 patch 7.4.1938 Problem: When writing viminfo numbered marks were duplicated. Solution: Check for duplicates between current numbered marks and the ones read from viminfo.
author Christian Brabandt <cb@256bit.org>
date Tue, 14 Jun 2016 23:15:06 +0200
parents c942d2622807
children 96b65a1b7964
files src/mark.c src/version.c
diffstat 2 files changed, 22 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/mark.c
+++ b/src/mark.c
@@ -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');
     }
 
--- 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 */
 /**/
+    1938,
+/**/
     1937,
 /**/
     1936,