From e1f16de894e106961e4e034a68c16281a24b837f Mon Sep 17 00:00:00 2001 From: tjr Date: Fri, 24 May 2002 06:17:29 +0000 Subject: Exit with non-zero status if any files specified could not be opened when -s option is given (SUSv3). --- usr.bin/paste/paste.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'usr.bin/paste') diff --git a/usr.bin/paste/paste.c b/usr.bin/paste/paste.c index ea75288..730ae67 100644 --- a/usr.bin/paste/paste.c +++ b/usr.bin/paste/paste.c @@ -62,8 +62,8 @@ __FBSDID("$FreeBSD$"); char *delim; int delimcnt; -void parallel(char **); -void sequential(char **); +int parallel(char **); +int sequential(char **); int tr(char *); static void usage(void); @@ -72,7 +72,7 @@ char tab[] = "\t"; int main(int argc, char *argv[]) { - int ch, seq; + int ch, rval, seq; seq = 0; while ((ch = getopt(argc, argv, "d:s")) != -1) @@ -98,10 +98,10 @@ main(int argc, char *argv[]) } if (seq) - sequential(argv); + rval = sequential(argv); else - parallel(argv); - exit(0); + rval = parallel(argv); + exit(rval); } typedef struct _list { @@ -111,7 +111,7 @@ typedef struct _list { char *name; } LIST; -void +int parallel(char **argv) { LIST *lp; @@ -175,21 +175,25 @@ parallel(char **argv) if (output) putchar('\n'); } + + return (0); } -void +int sequential(char **argv) { FILE *fp; - int cnt; + int cnt, failed; char ch, *p, *dp; char buf[_POSIX2_LINE_MAX + 1]; + failed = 0; for (; (p = *argv); ++argv) { if (p[0] == '-' && !p[1]) fp = stdin; else if (!(fp = fopen(p, "r"))) { warn("%s", p); + failed = 1; continue; } if (fgets(buf, sizeof(buf), fp)) { @@ -212,6 +216,8 @@ sequential(char **argv) if (fp != stdin) (void)fclose(fp); } + + return (failed != 0); } int -- cgit v1.1