Date: Thu, 16 May 2002 15:38:35 +0300 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: Bruce Evans <bde@zeta.org.au> Cc: Mike Makonnen <makonnen@pacbell.net>, freebsd-audit@FreeBSD.org Subject: Re: RFC: Port of NetBSD cat(1)'s -f option. Message-ID: <20020516123835.GA93447@hades.hell.gr> In-Reply-To: <20020516164332.B1704-100000@gamplex.bde.org> References: <20020515211758.GB68380@hades.hell.gr> <20020516164332.B1704-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2002-05-16 17:40, Bruce Evans <bde@zeta.org.au> wrote:
>
> > + if (stat(path, &st) < 0) {
> > ...
> > + if (S_ISREG(st.st_mode) == 0) {
>
> I object. If stat() fails, then we have no idea about the file type,
> so we shouldn't classify it as regular and must set rval so that the
> error is reflected in cat's exit status. Letting the old code handle
> the error seems best.
>
> Using stat() instead of fstat() gives some races. NetBSD reduces the
> races by checking the mode both before and after open().
I have the following version of basesrc/bin/cat locally:
$NetBSD: cat.c,v 1.30 2002/05/09 02:13:10 thorpej Exp $
This checks only after the open with fstat(). I agree that using
fstat() is better. Thanks for pointing this out ;)
> A more fundamental bug:
> The new variable fflag is never used.
Whoops. That's what one gets for writing C programs very late.
Fixed. I had probably meant to add this after the code works with
*stat() and forgot all about it, when testing. Thank you again.
> Style bugs:
> - nested declaration of st.
Removed after a comment by Mike Makonnen.
> - more verbose and bogus handling of the variable 'i'. 'i' is just the
> loop counter for a `for' loop that is obfuscated as a `while' loop.
I can't think of some way to use `i' differently, without rewriting
the `while' loop as a `for' loop too. Mixing this change with the
addition of -f seemed like wrong to me though. The conversion to a
`for' loop can be done in a separate change, if it's deemed necessary.
What is it that makes you think the handling of `i' in the added code
is bogus? :-/
To save the readers of the list a few KB, I won't post the patch
again. Its updated version can be found at:
http://www.FreeBSD.org/~keramida/diff/2002-05-16.cat,aa
- Giorgos
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020516123835.GA93447>
