tail: fix -c +N. Closes 4111
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -203,7 +203,7 @@ int tail_main(int argc, char **argv) | |||||||
| 		int fd = fds[i]; | 		int fd = fds[i]; | ||||||
|  |  | ||||||
| 		if (ENABLE_FEATURE_FANCY_TAIL && fd < 0) | 		if (ENABLE_FEATURE_FANCY_TAIL && fd < 0) | ||||||
| 			continue; /* may happen with -E */ | 			continue; /* may happen with -F */ | ||||||
|  |  | ||||||
| 		if (nfiles > header_threshhold) { | 		if (nfiles > header_threshhold) { | ||||||
| 			tail_xprint_header(fmt, argv[i]); | 			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): */ | 		 * Used only by +N code ("start from Nth", 1-based): */ | ||||||
| 		seen = 1; | 		seen = 1; | ||||||
| 		newlines_seen = 0; | 		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) { | 			if (G.from_top) { | ||||||
| 				int nwrite = nread; | 				int nwrite = nread; | ||||||
| 				if (seen < count) { | 				if (seen < count) { | ||||||
| 					/* We need to skip a few more bytes/lines */ | 					/* We need to skip a few more bytes/lines */ | ||||||
| 					if (COUNT_BYTES) { | 					if (COUNT_BYTES) { | ||||||
| 						nwrite -= (count - seen); | 						nwrite -= (count - seen); | ||||||
| 						seen = count; | 						seen += nread; | ||||||
| 					} else { | 					} else { | ||||||
| 						char *s = buf; | 						char *s = buf; | ||||||
| 						do { | 						do { | ||||||
|   | |||||||
| @@ -14,4 +14,12 @@ testing "tail: +N with N > file length" \ | |||||||
| 	"0\n" \ | 	"0\n" \ | ||||||
| 	"" "qw" | 	"" "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 | exit $FAILCOUNT | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user