diff --git a/cat.c b/cat.c index d363bec..a0cd961 100644 --- a/cat.c +++ b/cat.c @@ -30,16 +30,16 @@ main(int argc, char *argv[]) } else { for (; *argv; argc--, argv++) { if ((*argv)[0] == '-' && !(*argv)[1]) { - concat(stdin, "", stdout, ""); + *argv = ""; + fp = stdin; } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; - } else { - concat(fp, *argv, stdout, ""); - if (fshut(fp, *argv)) { - ret = 1; - } + continue; } + concat(fp, *argv, stdout, ""); + if (fp != stdin && fshut(fp, *argv)) + ret = 1; } } diff --git a/cksum.c b/cksum.c index 581af7a..4ad78a1 100644 --- a/cksum.c +++ b/cksum.c @@ -96,17 +96,19 @@ main(int argc, char *argv[]) cksum(stdin, NULL); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } cksum(fp, *argv); - if (fshut(fp, *argv)) { + if (fp != stdin && fshut(fp, *argv)) ret = 1; - } } } - return fshut(stdout, "") || ret; + return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; } diff --git a/cols.c b/cols.c index c4c3b91..e5eec71 100644 --- a/cols.c +++ b/cols.c @@ -48,13 +48,16 @@ main(int argc, char *argv[]) getlines(stdin, &b); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } getlines(fp, &b); - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } } diff --git a/cut.c b/cut.c index 07faf21..b5e176e 100644 --- a/cut.c +++ b/cut.c @@ -187,18 +187,17 @@ main(int argc, char *argv[]) cut(stdin, ""); else { for (; *argv; argc--, argv++) { - if (*argv[0] == '-' && !*argv[1]) { - cut(stdin, ""); - } else { - if (!(fp = fopen(*argv, "r"))) { - weprintf("fopen %s:", *argv); - ret = 1; - continue; - } - cut(fp, *argv); - if (fshut(fp, *argv)) - ret = 1; + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { + weprintf("fopen %s:", *argv); + ret = 1; + continue; } + cut(fp, *argv); + if (fp != stdin && fshut(fp, *argv)) + ret = 1; } } diff --git a/expand.c b/expand.c index 8e6afe1..c6057f7 100644 --- a/expand.c +++ b/expand.c @@ -110,13 +110,16 @@ main(int argc, char *argv[]) expand("", stdin); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } expand(*argv, fp); - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } } diff --git a/fold.c b/fold.c index e896527..0a55c61 100644 --- a/fold.c +++ b/fold.c @@ -95,14 +95,17 @@ main(int argc, char *argv[]) fold(stdin, ""); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; - } else { - fold(fp, *argv); - if (fshut(fp, *argv)) - ret = 1; + continue; } + fold(fp, *argv); + if (fp != stdin && fshut(fp, *argv)) + ret = 1; } } diff --git a/grep.c b/grep.c index bf162ae..bfb2243 100644 --- a/grep.c +++ b/grep.c @@ -259,17 +259,20 @@ main(int argc, char *argv[]) if (argc == 0) { match = grep(stdin, ""); } else { - for (i = 0; i < argc; i++) { - if (!(fp = fopen(argv[i], "r"))) { + for (; *argv; argc--, argv++) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { if (!sflag) - weprintf("fopen %s:", argv[i]); + weprintf("fopen %s:", *argv); match = Error; continue; } - m = grep(fp, argv[i]); + m = grep(fp, *argv); if (m == Error || (match != Error && m == Match)) match = m; - if (fshut(fp, argv[i])) + if (fp != stdin && fshut(fp, *argv)) match = Error; } } diff --git a/head.c b/head.c index a7f08d2..3f331ce 100644 --- a/head.c +++ b/head.c @@ -32,7 +32,7 @@ main(int argc, char *argv[]) { size_t n = 10; FILE *fp; - int ret = 0, newline, many; + int ret = 0, newline = 0, many = 0; ARGBEGIN { case 'n': @@ -50,7 +50,10 @@ main(int argc, char *argv[]) } else { many = argc > 1; for (newline = 0; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; @@ -62,7 +65,7 @@ main(int argc, char *argv[]) } newline = 1; head(fp, *argv, n); - if(fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } } diff --git a/join.c b/join.c index 58f0f88..0d8f152 100644 --- a/join.c +++ b/join.c @@ -548,5 +548,5 @@ main(int argc, char *argv[]) if (fp[0] != fp[1]) enfshut(2, fp[1], argv[1]); enfshut(2, stdout, ""); - exit(0); + return 0; } diff --git a/libutil/crypt.c b/libutil/crypt.c index 4591066..0de4269 100644 --- a/libutil/crypt.c +++ b/libutil/crypt.c @@ -126,18 +126,24 @@ cryptmain(int argc, char *argv[], struct crypt_ops *ops, uint8_t *md, size_t sz) mdprint(md, "", sz); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } - if (cryptsum(ops, fp, *argv, md) == 1) + if (cryptsum(ops, fp, *argv, md)) { ret = 1; - else + } else { mdprint(md, *argv, sz); - fclose(fp); + } + if (fp != stdin && fshut(fp, *argv)) + ret = 1; } } + return ret; } diff --git a/nl.c b/nl.c index 49c1d10..8c7b41f 100644 --- a/nl.c +++ b/nl.c @@ -190,11 +190,15 @@ main(int argc, char *argv[]) if (!argc) { nl("", stdin); } else { - if (!(fp = fopen(argv[0], "r"))) + if (argv[0][0] == '-' && !argv[0][1]) { + argv[0] = ""; + fp = stdin; + } else if (!(fp = fopen(argv[0], "r"))) { eprintf("fopen %s:", argv[0]); + } nl(argv[0], fp); } - return !!((fp && fshut(fp, argv[0])) + fshut(stdin, "") + - fshut(stdout, "")); + return !!((fp && fp != stdin && fshut(fp, argv[0])) + + fshut(stdin, "") + fshut(stdout, "")); } diff --git a/paste.c b/paste.c index dc9c32a..6f3fac2 100644 --- a/paste.c +++ b/paste.c @@ -116,7 +116,8 @@ main(int argc, char *argv[]) dsc = ereallocarray(NULL, argc, sizeof(*dsc)); for (i = 0; i < argc; i++) { - if (!strcmp(argv[i], "-")) { + if (argv[i][0] == '-' && !argv[i][1]) { + argv[i] = ""; dsc[i].fp = stdin; } else if (!(dsc[i].fp = fopen(argv[i], "r"))) { eprintf("fopen %s:", argv[i]); @@ -134,5 +135,5 @@ main(int argc, char *argv[]) if (dsc[i].fp != stdin && fshut(dsc[i].fp, argv[i])) ret = 1; - return fshut(stdin, "") || fshut(stdout, "") || ret; + return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; } diff --git a/sed.c b/sed.c index 6982c40..65b3708 100644 --- a/sed.c +++ b/sed.c @@ -1114,7 +1114,7 @@ next_file(void) if (first) /* given no files, default to stdin */ file = stdin; /* else we've used all our files, leave file = NULL */ - } else if (!strcmp(*files, "-")) { + } else if ((*files)[0] == '-' && !(*files)[1]) { file = stdin; files++; } else if (!(file = fopen(*files++, "r"))) { @@ -1123,6 +1123,7 @@ next_file(void) } } while (!file && *files); first = 0; + return !file; } diff --git a/sort.c b/sort.c index 8ec14c3..2aa4aee 100644 --- a/sort.c +++ b/sort.c @@ -301,7 +301,10 @@ main(int argc, char *argv[]) getlines(stdin, &linebuf); } } else for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { enprintf(2, "fopen %s:", *argv); continue; } @@ -310,7 +313,7 @@ main(int argc, char *argv[]) } else { getlines(fp, &linebuf); } - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } diff --git a/strings.c b/strings.c index 598b2e4..51b7eb6 100644 --- a/strings.c +++ b/strings.c @@ -79,13 +79,16 @@ main(int argc, char *argv[]) strings(stdin, "", len); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } strings(fp, *argv, len); - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } } diff --git a/tail.c b/tail.c index 65d6c97..3489da7 100644 --- a/tail.c +++ b/tail.c @@ -83,7 +83,7 @@ main(int argc, char *argv[]) struct stat st1, st2; FILE *fp; size_t tmpsize; - int ret = 0, newline, many; + int ret = 0, newline = 0, many = 0; char *numstr, *tmp; void (*tail)(FILE *, const char *) = taketail; @@ -115,7 +115,10 @@ main(int argc, char *argv[]) if ((many = argc > 1) && fflag) usage(); for (newline = 0; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; @@ -130,7 +133,7 @@ main(int argc, char *argv[]) tail(fp, *argv); if (!fflag) { - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; continue; } diff --git a/unexpand.c b/unexpand.c index 333b8e9..feb6592 100644 --- a/unexpand.c +++ b/unexpand.c @@ -153,16 +153,21 @@ main(int argc, char *argv[]) unexpand("", stdin); } else { for (; *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } unexpand(*argv, fp); - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } } + efshut(stdin, ""); + efshut(stdout, ""); return ret; } diff --git a/uniq.c b/uniq.c index 030b622..922ba39 100644 --- a/uniq.c +++ b/uniq.c @@ -96,7 +96,7 @@ usage(void) int main(int argc, char *argv[]) { - FILE *fp = stdin, *ofp = stdout; + FILE *fp, *ofp; ARGBEGIN { case 'c': @@ -124,16 +124,23 @@ main(int argc, char *argv[]) if (!argc) { uniq(stdin, stdout); } else { - if (strcmp(argv[0], "-") && !(fp = fopen(argv[0], "r"))) + if (argv[0][0] == '-' && !argv[0][1]) { + argv[0] = ""; + fp = stdin; + } else if (!(fp = fopen(argv[0], "r"))) { eprintf("fopen %s:", argv[0]); - if (argc == 2) { - if (strcmp(argv[1], "-") && !(ofp = fopen(argv[1], "w"))) - eprintf("fopen %s:", argv[1]); + } + if (argc == 1 || (argv[1][0] == '-' && !argv[1][1])) { + argv[1] = ""; + ofp = stdout; + } else if (!(ofp = fopen(argv[1], "w"))) { + eprintf("fopen %s:", argv[1]); } uniq(fp, ofp); } uniqfinish(ofp); - return !!(fshut(fp, fp == stdin ? "" : argv[0]) + - fshut(ofp, ofp == stdout ? "" : argv[1])); + efshut(fp, argv[0]); + efshut(ofp, argv[1]); + return 0; } diff --git a/uudecode.c b/uudecode.c index a443e7c..4641fb8 100644 --- a/uudecode.c +++ b/uudecode.c @@ -246,7 +246,7 @@ main(int argc, char *argv[]) if (argc > 1) usage(); - if (!argc) { + if (!argc || (argv[0][0] == '-' && !argv[0][1])) { fp = stdin; ifname = ""; } else { diff --git a/uuencode.c b/uuencode.c index ddd68ad..17b59ea 100644 --- a/uuencode.c +++ b/uuencode.c @@ -114,7 +114,7 @@ main(int argc, char *argv[]) if (!argc || argc > 2) usage(); - if (argc == 1) { + if (argc == 1 || (argv[0][0] == '-' && !argv[0][1])) { if (mflag) uuencodeb64(stdin, argv[0], ""); else diff --git a/wc.c b/wc.c index 4995116..b1bd0df 100644 --- a/wc.c +++ b/wc.c @@ -84,13 +84,16 @@ main(int argc, char *argv[]) wc(stdin, NULL); } else { for (many = (argc > 1); *argv; argc--, argv++) { - if (!(fp = fopen(*argv, "r"))) { + if ((*argv)[0] == '-' && !(*argv)[1]) { + *argv = ""; + fp = stdin; + } else if (!(fp = fopen(*argv, "r"))) { weprintf("fopen %s:", *argv); ret = 1; continue; } wc(fp, *argv); - if (fshut(fp, *argv)) + if (fp != stdin && fshut(fp, *argv)) ret = 1; } if (many)