diff options
author | Igor Sobrado <sobrado@cvs.openbsd.org> | 2014-02-01 23:34:50 +0000 |
---|---|---|
committer | Igor Sobrado <sobrado@cvs.openbsd.org> | 2014-02-01 23:34:50 +0000 |
commit | 20353eeaf61efbd2cb6d969a3494f7a3847f1a30 (patch) | |
tree | 25851195b17c092bd7b9f9b564823d51c3409dbb | |
parent | 915d9c7bf3a6e6b8164cf372905fd855294d6f9c (diff) |
improve POSIX compliance by continuing to process the remaining file
operands after not finding an input file.
from the IEEE Std 1003.1-2008 (``POSIX.1'') rationale:
"Unlike other utilities, some historical implementations of cut
exit after not finding an input file, rather than continuing to
process the remaining file operands. This behavior is prohibited
by this volume of POSIX.1-2008, where only the exit status is
affected by this problem."
joint work with jmc@, who identified the compliance issue, and millert@
ok millert@, jmc@
-rw-r--r-- | usr.bin/cut/cut.1 | 11 | ||||
-rw-r--r-- | usr.bin/cut/cut.c | 21 |
2 files changed, 22 insertions, 10 deletions
diff --git a/usr.bin/cut/cut.1 b/usr.bin/cut/cut.1 index 7d282b84e26..d3bb88add8d 100644 --- a/usr.bin/cut/cut.1 +++ b/usr.bin/cut/cut.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: cut.1,v 1.20 2014/02/01 22:47:49 sobrado Exp $ +.\" $OpenBSD: cut.1,v 1.21 2014/02/01 23:34:49 sobrado Exp $ .\" $NetBSD: cut.1,v 1.6 1995/10/02 20:19:26 jtc Exp $ .\" .\" Copyright (c) 1989, 1990, 1993 @@ -59,8 +59,13 @@ utility selects portions of each line (as specified by .Ar list ) from each .Ar file -(or the standard input by default), and writes them to the -standard output. +and writes them to the standard output. +If no +.Ar file +arguments are specified, or a file argument is a single dash +.Pq Sq \- , +.Nm +reads from the standard input. The items specified by .Ar list can be in terms of column position or in terms of fields delimited diff --git a/usr.bin/cut/cut.c b/usr.bin/cut/cut.c index 9590800b93d..57e820a9dec 100644 --- a/usr.bin/cut/cut.c +++ b/usr.bin/cut/cut.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cut.c,v 1.16 2013/11/23 17:30:29 deraadt Exp $ */ +/* $OpenBSD: cut.c,v 1.17 2014/02/01 23:34:49 sobrado Exp $ */ /* $NetBSD: cut.c,v 1.9 1995/09/02 05:59:23 jtc Exp $ */ /* @@ -59,7 +59,7 @@ main(int argc, char *argv[]) { FILE *fp; void (*fcn)(FILE *, char *); - int ch; + int ch, eval = 0; setlocale (LC_ALL, ""); @@ -104,14 +104,21 @@ main(int argc, char *argv[]) if (*argv) for (; *argv; ++argv) { - if (!(fp = fopen(*argv, "r"))) - err(1, "%s", *argv); - fcn(fp, *argv); - (void)fclose(fp); + if (strcmp(*argv, "-") == 0) + fcn(stdin, "stdin"); + else { + if ((fp = fopen(*argv, "r"))) { + fcn(fp, *argv); + (void)fclose(fp); + } else { + eval = 1; + warn("%s", *argv); + } + } } else fcn(stdin, "stdin"); - exit(0); + exit(eval); } int autostart, autostop, maxval; |