[PATCH] tail: add -F
Denys Vlasenko
vda.linux at googlemail.com
Tue Jul 21 22:32:30 UTC 2009
On Tuesday 21 July 2009 04:53, Eric Lammerts wrote:
> this patch adds the tail -F option (if FEATURE_FANCY_TAIL is set).
> This is handy for watching logfiles that get rotated.
>
> +#define FOLLOW_RETRY (opt & 0x40)
> + if (FOLLOW_RETRY) opt |= 0x1;
opt_complementary = "xxxxxx:Ff" would achieve the same.
> +#else
> +#define FOLLOW_RETRY 0
> #endif
> do {
> int fd = open_or_warn_stdin(argv[i]);
> - if (fd < 0) {
> + if (fd < 0 && !FOLLOW_RETRY) {
> G.status = EXIT_FAILURE;
> continue;
> }
> @@ -164,6 +168,8 @@ int tail_main(int argc, char **argv)
> fmt = header_fmt + 1; /* Skip header leading newline on first output. */
> i = 0;
> do {
> + if (FOLLOW_RETRY && fds[i] < 0) continue;
> +
If !FOLLOW_RETRY, fds[i] is never < 0. You do not need to check
FOLLOW_RETRY, just "if(fds[i] < 0) continue;" works.
> if (nfiles > header_threshhold) {
> tail_xprint_header(fmt, argv[i]);
> fmt = header_fmt;
> @@ -265,10 +271,25 @@ int tail_main(int argc, char **argv)
> sleep(sleep_period);
> i = 0;
> do {
> + if (FOLLOW_RETRY) {
> + struct stat sbuf, fsbuf;
> +
> + if (fds[i] < 0 || fstat(fds[i], &fsbuf) < 0 || stat(argv[i], &sbuf) < 0 || fsbuf.st_dev != sbuf.st_dev || fsbuf.st_ino != sbuf.st_ino) {
This line is way too long.
Committed with some editing, thanks!
--
vda
More information about the busybox
mailing list