Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Nov 2001 00:50:02 -0800 (PST)
From:      Maxim Konovalov <maxim@macomnet.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/24955:/usr/bin/tail -F in 4.1+ doesn't work if file inode changes (works in 4.0)
Message-ID:  <200111030850.fA38o2f55553@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/24955; it has been noted by GNATS.

From: Maxim Konovalov <maxim@macomnet.ru>
To: freebsd-gnats-submit@FreeBSD.org
Cc: kmarx@vicor-nb.com
Subject: Re: bin/24955:/usr/bin/tail -F in 4.1+ doesn't work if file inode
 changes (works in 4.0)
Date: Sat, 3 Nov 2001 11:43:33 +0300 (MSK)

 Hello,
 
 Try this patch:
 
 Index: forward.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.bin/tail/forward.c,v
 retrieving revision 1.27
 diff -u -r1.27 forward.c
 --- forward.c	1 Sep 2001 22:22:44 -0000	1.27
 +++ forward.c	2 Nov 2001 21:46:27 -0000
 @@ -94,10 +94,10 @@
  	off_t off;
  	struct stat *sbp;
  {
 -	int ch, kq = -1;
 +	int ch, dirfd, kq = -1;
  	int action = USE_SLEEP;
 -	struct kevent ev[2];
 -	struct stat sb2;
 +	struct kevent ev[3];
 +	struct stat sb2, sbl;
 
  	switch(style) {
  	case FBYTES:
 @@ -179,6 +179,15 @@
  		action = ADD_EVENTS;
  	}
 
 +	if (lstat(fname, &sbl) != -1) {
 +		if ((sbl.st_mode & S_IFLNK) == S_IFLNK) {
 +			dirfd = open((const char *)dirname(fname), O_RDONLY);
 +			if (dirfd == -1)
 +				err(1, "open");
 +		}
 +	} else
 +		err(1, "lstat");
 +
  	for (;;) {
  		while ((ch = getc(fp)) != EOF)
  			if (putchar(ch) == EOF)
 @@ -202,6 +211,13 @@
  				    EV_ADD | EV_ENABLE | EV_CLEAR,
  				    NOTE_DELETE | NOTE_RENAME, 0, 0);
  				n++;
 +
 +				if ((sbl.st_mode & S_IFLNK) == S_IFLNK) {
 +					EV_SET(&ev[n], dirfd, EVFILT_VNODE,
 +					    EV_ADD | EV_ENABLE | EV_CLEAR,
 +					    NOTE_WRITE, 0, 0);
 +					n++;
 +				}
  			}
  			EV_SET(&ev[n], fileno(fp), EVFILT_READ,
  			    EV_ADD | EV_ENABLE | EV_CLEAR, 0, 0, 0);
 
 -- 
 Maxim Konovalov, MAcomnet, Internet-Intranet Dept., system engineer
 phone: +7 (095) 796-9079, mailto: maxim@macomnet.ru
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111030850.fA38o2f55553>