[git commit] tail compat: fix header printing for tail -f

Denys Vlasenko vda.linux at googlemail.com
Wed Oct 16 13:02:50 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=64938011f3ba06a8f425926397172dc361bce851
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Makes tail -f for multiple files display the header only if another (ie. not
currently displayed) file changed.

Signed-off-by: Bartosz Golaszewski <bartekgola at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 TODO             |    5 -----
 coreutils/tail.c |    5 ++++-
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/TODO b/TODO
index d2a085e..dcf48c2 100644
--- a/TODO
+++ b/TODO
@@ -127,11 +127,6 @@ patch
 
   And while we're at it, a new patch filename quoting format is apparently
   coming soon:  http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2
----
-tail
-  ./busybox tail -f foo.c~ TODO
-  should not print fmt=header_fmt for subsequent date >> TODO; i.e. only
-  fmt+ if another (not the current) file did change
 
 Architectural issues:
 
diff --git a/coreutils/tail.c b/coreutils/tail.c
index 07c71ca..eab502b 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -105,6 +105,7 @@ int tail_main(int argc, char **argv)
 
 	int *fds;
 	const char *fmt;
+	int prev_fd;
 
 	INIT_G();
 
@@ -309,6 +310,7 @@ int tail_main(int argc, char **argv)
 			xwrite(STDOUT_FILENO, tailbuf, taillen);
 		}
 	} while (++i < nfiles);
+	prev_fd = fds[i-1];
 
 	tailbuf = xrealloc(tailbuf, BUFSIZ);
 
@@ -365,9 +367,10 @@ int tail_main(int argc, char **argv)
 				nread = tail_read(fd, tailbuf, BUFSIZ);
 				if (nread <= 0)
 					break;
-				if (fmt) {
+				if (fmt && (fd != prev_fd)) {
 					tail_xprint_header(fmt, filename);
 					fmt = NULL;
+					prev_fd = fd;
 				}
 				xwrite(STDOUT_FILENO, tailbuf, nread);
 			}


More information about the busybox-cvs mailing list