Date: Wed, 15 May 2002 09:18:28 +0300 From: Giorgos Keramidas <keramida@FreeBSD.org> To: freebsd-audit@FreeBSD.org Subject: RFC: Port of NetBSD cat(1)'s -f option. Message-ID: <20020515061827.GA47688@hades.hell.gr>
next in thread | raw e-mail | index | archive | help
Here's a patch that adds to our cat(1) the same functionality as
NetBSD cat(1) when passed -f on the command line. The original
commit log from NetBSD's CVS tree is:
----------------------------
revision 1.18
date: 2000/01/15 01:13:15; author: christos; state: Exp; lines: +4 -2
branches: 1.18.4;
Add a -f fflag that makes sure that we only try to read from plain files
so that there is no chance to block.
What do you all think of this?
%%%
Index: cat.1
===================================================================
RCS file: /home/ncvs/src/bin/cat/cat.1,v
retrieving revision 1.19
diff -u -r1.19 cat.1
--- cat.1 25 Sep 2001 18:10:18 -0000 1.19
+++ cat.1 15 May 2002 05:57:28 -0000
@@ -82,6 +82,8 @@
option), and display a dollar sign
.Pq Ql \&$
at the end of each line.
+.It Fl f
+Only attempt to display regular files.
.It Fl n
Number the output lines, starting at 1.
.It Fl s
Index: cat.c
===================================================================
RCS file: /home/ncvs/src/bin/cat/cat.c,v
retrieving revision 1.21
diff -u -r1.21 cat.c
--- cat.c 22 Feb 2002 20:42:57 -0000 1.21
+++ cat.c 15 May 2002 05:56:26 -0000
@@ -66,7 +66,7 @@
#include <unistd.h>
#include <stddef.h>
-int bflag, eflag, nflag, sflag, tflag, vflag;
+int bflag, eflag, fflag, nflag, sflag, tflag, vflag;
int rval;
const char *filename;
@@ -85,7 +85,7 @@
setlocale(LC_CTYPE, "");
- while ((ch = getopt(argc, argv, "benstuv")) != -1)
+ while ((ch = getopt(argc, argv, "befnstuv")) != -1)
switch (ch) {
case 'b':
bflag = nflag = 1; /* -b implies -n */
@@ -93,6 +93,9 @@
case 'e':
eflag = vflag = 1; /* -e implies -v */
break;
+ case 'f':
+ fflag = 1;
+ break;
case 'n':
nflag = 1;
break;
@@ -110,12 +113,12 @@
break;
default:
fprintf(stderr,
- "usage: cat [-benstuv] [-] [file ...]\n");
+ "usage: cat [-befnstuv] [-] [file ...]\n");
exit(1);
}
argv += optind;
- if (bflag || eflag || nflag || sflag || tflag || vflag)
+ if (bflag || eflag || fflag || nflag || sflag || tflag || vflag)
scanfiles(argv, 1);
else
scanfiles(argv, 0);
@@ -138,7 +141,15 @@
filename = "stdin";
fd = STDIN_FILENO;
} else {
+ struct stat st;
+
filename = path;
+ if (stat(path, &st) < 0 ||
+ S_ISREG(st.st_mode) == 0) {
+ i++; /* Skip to next file. */
+ continue;
+ }
+
fd = open(path, O_RDONLY);
#ifndef NO_UDOM_SUPPORT
if (fd < 0 && errno == EOPNOTSUPP)
%%%
--
Giorgos Keramidas - http://www.FreeBSD.org
keramida@FreeBSD.org - The Power to Serve
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?20020515061827.GA47688>
