commit ebf740f96244497b003b65e56a4f147b7f7b956a
parent 9781959581c4c150decd0c7cbc325da23eb009d3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Sun,  4 Mar 2018 17:10:17 +0100
Improve doglobal()
Don't use directly the line numbers and call to getlst()
when a line is matched.
Diffstat:
| M | ed.c |  |  | 30 | ++++++++++++++++++------------ | 
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/ed.c b/ed.c
@@ -1318,7 +1318,7 @@ chkglobal(void)
 static void
 doglobal(void)
 {
-	int i, k;
+	int cnt, ln, k;
 
 	skipblank();
 	cmdline.siz = 0;
@@ -1326,18 +1326,24 @@ doglobal(void)
 	if (uflag)
 		chkprint(0);
 
-	for (i = 1; i <= lastln; i++) {
-		k = getindex(i);
-		if (!zero[k].global)
-			continue;
-		curln = i;
-		nlines = 0;
-		if (uflag) {
-			line1 = line2 = i;
-			pflag = 0;
-			doprint();
+	ln = line1;
+	for (cnt = 0; cnt < lastln; ) {
+		k = getindex(ln);
+		if (zero[k].global) {
+			zero[k].global = 0;
+			curln = ln;
+			nlines = 0;
+			if (uflag) {
+				line1 = line2 = ln;
+				pflag = 0;
+				doprint();
+			}
+			getlst();
+			docmd();
+		} else {
+			cnt++;
+			ln = nextln(ln);
 		}
-		docmd();
 	}
 	discard();   /* cover the case of not matching anything */
 }