svn commit: trunk/busybox/miscutils

vda at busybox.net vda at busybox.net
Thu Mar 8 16:44:32 UTC 2007


Author: vda
Date: 2007-03-08 08:44:32 -0800 (Thu, 08 Mar 2007)
New Revision: 18039

Log:
less: fix 'n'ext match: sometimes was going to 999999th line


Modified:
   trunk/busybox/miscutils/less.c


Changeset:
Modified: trunk/busybox/miscutils/less.c
===================================================================
--- trunk/busybox/miscutils/less.c	2007-03-08 16:44:20 UTC (rev 18038)
+++ trunk/busybox/miscutils/less.c	2007-03-08 16:44:32 UTC (rev 18039)
@@ -342,6 +342,23 @@
 	print_hilite(p);
 }
 
+static void cap_cur_fline(int nlines)
+{
+	int diff;
+	if (cur_fline < 0)
+		cur_fline = 0;
+	if (cur_fline + max_displayed_line > max_fline + TILDES) {
+		cur_fline -= nlines;
+		if (cur_fline < 0)
+			cur_fline = 0;
+		diff = max_fline - (cur_fline + max_displayed_line) + TILDES;
+		/* As the number of lines requested was too large, we just move
+		to the end of the file */
+		if (diff > 0)
+			cur_fline += diff;
+	}
+}
+
 static char controls[] =
 	/* NUL: never encountered; TAB: not converted */
 	/**/"\x01\x02\x03\x04\x05\x06\x07\x08"  "\x0a\x0b\x0c\x0d\x0e\x0f"
@@ -479,18 +496,9 @@
 /* Move the buffer up and down in the file in order to scroll */
 static void buffer_down(int nlines)
 {
-	int diff;
 	cur_fline += nlines;
 	read_lines();
-
-	if (cur_fline + max_displayed_line > max_fline + TILDES) {
-		cur_fline -= nlines;
-		diff = max_fline - (cur_fline + max_displayed_line) + TILDES;
-		/* As the number of lines requested was too large, we just move
-		to the end of the file */
-		if (diff > 0)
-			cur_fline += diff;
-	}
+	cap_cur_fline(nlines);
 	buffer_fill_and_print();
 }
 
@@ -763,6 +771,7 @@
 	if (match >= num_matches && eof_error > 0) {
 		cur_fline = MAXLINES; /* look as far as needed */
 		read_lines();
+		cap_cur_fline(cur_fline);
 	}
 	if (num_matches) {
 		normalize_match_pos(match);




More information about the busybox-cvs mailing list