[git commit] tail: fix -c +N. Closes 4111

Denys Vlasenko vda.linux at googlemail.com
Fri Sep 16 22:12:24 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=0851d125c33d65cc8a0655758f2928960077c20c
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/tail.c     |    6 +++---
 testsuite/tail.tests |    8 ++++++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/coreutils/tail.c b/coreutils/tail.c
index 454c259..43cecbd 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -203,7 +203,7 @@ int tail_main(int argc, char **argv)
 		int fd = fds[i];
 
 		if (ENABLE_FEATURE_FANCY_TAIL && fd < 0)
-			continue; /* may happen with -E */
+			continue; /* may happen with -F */
 
 		if (nfiles > header_threshhold) {
 			tail_xprint_header(fmt, argv[i]);
@@ -252,14 +252,14 @@ int tail_main(int argc, char **argv)
 		 * Used only by +N code ("start from Nth", 1-based): */
 		seen = 1;
 		newlines_seen = 0;
-		while ((nread = tail_read(fd, buf, tailbufsize-taillen)) > 0) {
+		while ((nread = tail_read(fd, buf, tailbufsize - taillen)) > 0) {
 			if (G.from_top) {
 				int nwrite = nread;
 				if (seen < count) {
 					/* We need to skip a few more bytes/lines */
 					if (COUNT_BYTES) {
 						nwrite -= (count - seen);
-						seen = count;
+						seen += nread;
 					} else {
 						char *s = buf;
 						do {
diff --git a/testsuite/tail.tests b/testsuite/tail.tests
index 7140da2..305a83b 100755
--- a/testsuite/tail.tests
+++ b/testsuite/tail.tests
@@ -14,4 +14,12 @@ testing "tail: +N with N > file length" \
 	"0\n" \
 	"" "qw"
 
+testing "tail: -c +N with largish N" \
+	"
+	dd if=/dev/zero bs=16k count=1 2>/dev/null | tail -c +8200 | wc -c;
+	dd if=/dev/zero bs=16k count=1 2>/dev/null | tail -c +8208 | wc -c;
+	" \
+	"8185\n8177\n" \
+	"" ""
+
 exit $FAILCOUNT


More information about the busybox-cvs mailing list