Date: Sun, 25 Nov 2001 12:20: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: <200111252020.fAPKK2p01559@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: Ian Dowse <iedowse@maths.tcd.ie>
Cc: freebsd-gnats-submit@FreeBSD.org
Subject: Re: bin/24955:/usr/bin/tail -F in 4.1+ doesn't work if file inode
changes (works in 4.0)
Date: Sun, 25 Nov 2001 23:14:03 +0300 (MSK)
Hello Ian,
WARNS?=2 patch:
Index: Makefile
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/Makefile,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Makefile
--- Makefile 27 May 1994 12:32:45 -0000 1.1.1.1
+++ Makefile 25 Nov 2001 19:57:39 -0000
@@ -2,5 +2,6 @@
PROG= tail
SRCS= forward.c misc.c read.c reverse.c tail.c
+WARNS?= 2
.include <bsd.prog.mk>
Index: extern.h
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/extern.h,v
retrieving revision 1.6
diff -u -r1.6 extern.h
--- extern.h 1 Sep 2001 22:22:44 -0000 1.6
+++ extern.h 25 Nov 2001 20:00:04 -0000
@@ -36,7 +36,7 @@
*/
#define WR(p, size) do { \
- if (write(STDOUT_FILENO, p, size) != size) \
+ if (write(STDOUT_FILENO, p, size) != (ssize_t)size) \
oerr(); \
} while(0)
Index: forward.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/forward.c,v
retrieving revision 1.28
diff -u -r1.28 forward.c
--- forward.c 25 Nov 2001 18:03:28 -0000 1.28
+++ forward.c 25 Nov 2001 19:58:20 -0000
@@ -171,6 +171,9 @@
if (lines(fp, off))
return;
break;
+ case REVERSE:
+ case NOTSET:
+ break;
}
if (fflag) {
Index: read.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/read.c,v
retrieving revision 1.8
diff -u -r1.8 read.c
--- read.c 3 Dec 2000 17:05:45 -0000 1.8
+++ read.c 25 Nov 2001 20:00:26 -0000
@@ -115,7 +115,7 @@
} else {
if (wrap && (len = ep - p))
WR(p, len);
- if (len = p - sp)
+ if ((len = p - sp) != 0)
WR(sp, len);
}
return 0;
@@ -140,15 +140,15 @@
u_int blen;
u_int len;
char *l;
- } *lines;
+ } *slines;
int ch;
char *p;
int blen, cnt, recno, wrap;
char *sp;
- if ((lines = malloc(off * sizeof(*lines))) == NULL)
+ if ((slines = malloc(off * sizeof(*slines))) == NULL)
err(1, "malloc");
- bzero(lines, off * sizeof(*lines));
+ bzero(slines, off * sizeof(*slines));
sp = NULL;
blen = cnt = recno = wrap = 0;
@@ -160,13 +160,13 @@
}
*p++ = ch;
if (ch == '\n') {
- if (lines[recno].blen < cnt) {
- lines[recno].blen = cnt + 256;
- if ((lines[recno].l = realloc(lines[recno].l,
- lines[recno].blen)) == NULL)
+ if (slines[recno].blen < (u_int)cnt) {
+ slines[recno].blen = cnt + 256;
+ if ((slines[recno].l = realloc(slines[recno].l,
+ slines[recno].blen)) == NULL)
err(1, "realloc");
}
- bcopy(sp, lines[recno].l, lines[recno].len = cnt);
+ bcopy(sp, slines[recno].l, slines[recno].len = cnt);
cnt = 0;
p = sp;
if (++recno == off) {
@@ -180,8 +180,8 @@
return 1;
}
if (cnt) {
- lines[recno].l = sp;
- lines[recno].len = cnt;
+ slines[recno].l = sp;
+ slines[recno].len = cnt;
if (++recno == off) {
wrap = 1;
recno = 0;
@@ -190,16 +190,16 @@
if (rflag) {
for (cnt = recno - 1; cnt >= 0; --cnt)
- WR(lines[cnt].l, lines[cnt].len);
+ WR(slines[cnt].l, slines[cnt].len);
if (wrap)
for (cnt = off - 1; cnt >= recno; --cnt)
- WR(lines[cnt].l, lines[cnt].len);
+ WR(slines[cnt].l, slines[cnt].len);
} else {
if (wrap)
for (cnt = recno; cnt < off; ++cnt)
- WR(lines[cnt].l, lines[cnt].len);
+ WR(slines[cnt].l, slines[cnt].len);
for (cnt = 0; cnt < recno; ++cnt)
- WR(lines[cnt].l, lines[cnt].len);
+ WR(slines[cnt].l, slines[cnt].len);
}
return 0;
}
Index: reverse.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/reverse.c,v
retrieving revision 1.12
diff -u -r1.12 reverse.c
--- reverse.c 1 Sep 2001 22:22:44 -0000 1.12
+++ reverse.c 25 Nov 2001 20:00:51 -0000
@@ -101,6 +101,8 @@
case REVERSE:
r_buf(fp);
break;
+ case NOTSET:
+ break;
}
}
Index: tail.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/tail/tail.c,v
retrieving revision 1.12
diff -u -r1.12 tail.c
--- tail.c 2 Oct 2001 06:22:01 -0000 1.12
+++ tail.c 25 Nov 2001 20:09:59 -0000
@@ -169,7 +169,7 @@
}
if (*argv)
- for (first = 1; fname = *argv++;) {
+ for (first = 1; (fname = *argv++) != '\0';) {
if ((fp = fopen(fname, "r")) == NULL ||
fstat(fileno(fp), &sb)) {
ierr();
@@ -189,7 +189,7 @@
(void)fclose(fp);
}
else {
- fname = "stdin";
+ (const char *)fname = "stdin";
if (fstat(fileno(stdin), &sb)) {
ierr();
@@ -227,7 +227,7 @@
size_t len;
char *start;
- while (ap = *++argv) {
+ while ((ap = *++argv) != '\0') {
/* Return if "--" or not an option of any form. */
if (ap[0] != '-') {
if (ap[0] != '+')
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?200111252020.fAPKK2p01559>
