[PATCH 3/5] ed: place newly joined lines correctly

From: Thomas Mannay <audiobarrier_AT_openmailbox.org>
Date: Sun, 9 Oct 2016 23:12:46 +0000

---
 ed.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/ed.c b/ed.c
index 4ab40bc..d123814 100644
--- a/ed.c
+++ b/ed.c
_AT_@ -299,13 +299,17 @@ undo(void)
 }
 
 static void
-inject(char *s)
+inject(char *s, int j)
 {
 	int off, k, begin, end;
 
-	begin = getindex(curln);
-	end = getindex(nextln(curln));
-
+	if (j) {
+		begin = getindex(curln-1);
+		end = getindex(nextln(curln-1));
+	} else {
+		begin = getindex(curln);
+		end = getindex(nextln(curln));
+	}
 	while (*s) {
 		k = makeline(s, &off);
 		s += off;
_AT_@ -636,7 +640,7 @@ doread(char *fname)
 			s[n-1] = '\n';
 			s[n] = '\0';
 		}
-		inject(s);
+		inject(s, 0);
 	}
 	if (optdiag)
 		printf("%zu\n", cnt);
_AT_@ -753,7 +757,7 @@ append(int num)
 	while (getline(&s, &len, stdin) > 0) {
 		if (*s == '.' && s[1] == '\n')
 			break;
-		inject(s);
+		inject(s, 0);
 	}
 	free(s);
 }
_AT_@ -818,7 +822,7 @@ join(void)
 	s = addchar('\n', s, &cap, &len);
 	s = addchar('\0', s, &cap, &len);
 	delete(line1, line2);
-	inject(s);
+	inject(s, 1);
 	free(s);
 }
 
_AT_@ -845,7 +849,7 @@ copy(int where)
 	curln = where;
 
 	for (i = line1; i <= line2; ++i)
-		inject(gettxt(i));
+		inject(gettxt(i), 0);
 }
 
 static void
_AT_@ -1025,7 +1029,7 @@ subline(int num, int nth)
 	addpost(&s, &cap, &siz);
 	delete(num, num);
 	curln = prevln(num);
-	inject(s);
+	inject(s, 0);
 }
 
 static void
-- 
2.10.0
--Multipart=_Sun__9_Oct_2016_23_20_20_+0000_Tw0GY2bnCixoZsD5
Content-Type: text/x-patch;
 name="0004-ed-remove-double-free-in-join.patch"
Content-Disposition: attachment;
 filename="0004-ed-remove-double-free-in-join.patch"
Content-Transfer-Encoding: 7bit
Received on Mon Sep 17 2001 - 00:00:00 CEST

This archive was generated by hypermail 2.3.0 : Mon Oct 10 2016 - 03:24:12 CEST