diff --git a/cat.c b/cat.c index fb569f1..8ba02a2 100644 --- a/cat.c +++ b/cat.c @@ -44,5 +44,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/cksum.c b/cksum.c index 9a0d195..3355b4c 100644 --- a/cksum.c +++ b/cksum.c @@ -111,5 +111,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/cmp.c b/cmp.c index c04fce6..980c7ff 100644 --- a/cmp.c +++ b/cmp.c @@ -16,7 +16,7 @@ main(int argc, char *argv[]) { FILE *fp[2]; size_t line = 1, n; - int lflag = 0, sflag = 0, same = 1, b[2]; + int ret = 0, lflag = 0, sflag = 0, same = 1, b[2]; ARGBEGIN { case 'l': @@ -72,9 +72,11 @@ main(int argc, char *argv[]) } } - enfshut(2, fp[0], argv[0]); - if (fp[0] != fp[1]) - enfshut(2, fp[1], argv[1]); - enfshut(2, stdout, ""); - return !same; + if (!ret) + ret = !same; + if (fshut(fp[0], argv[0]) | (fp[0] != fp[1] && fshut(fp[1], argv[1])) | + fshut(stdout, "")) + ret = 2; + + return ret; } diff --git a/col.c b/col.c index 358d4a8..f7d4885 100644 --- a/col.c +++ b/col.c @@ -190,6 +190,8 @@ usage(void) int main(int argc, char *argv[]) { + int ret = 0; + ARGBEGIN { case 'b': backspace = 1; @@ -217,5 +219,7 @@ main(int argc, char *argv[]) col(); flush(); - return !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/cols.c b/cols.c index 6f43e35..981b36c 100644 --- a/cols.c +++ b/cols.c @@ -87,5 +87,7 @@ main(int argc, char *argv[]) putchar('\n'); } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/comm.c b/comm.c index 661aed2..e0ec7b7 100644 --- a/comm.c +++ b/comm.c @@ -33,7 +33,7 @@ main(int argc, char *argv[]) { FILE *fp[2]; size_t linelen[2] = { 0, 0 }; - int i, diff = 0; + int ret = 0, i, diff = 0; char *line[2] = { NULL, NULL }; ARGBEGIN { @@ -79,6 +79,9 @@ main(int argc, char *argv[]) printline((2 - diff) % 3, line[MAX(0, diff)]); } end: - return !!(fshut(fp[0], argv[0]) + (fp[0] != fp[1] && fshut(fp[1], argv[1])) + - fshut(stdout, "")); + ret |= fshut(fp[0], argv[0]); + ret |= (fp[0] != fp[1]) && fshut(fp[1], argv[1]); + ret |= fshut(stdout, ""); + + return ret; } diff --git a/cut.c b/cut.c index 33eecd0..0d3375e 100644 --- a/cut.c +++ b/cut.c @@ -201,5 +201,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/expand.c b/expand.c index 985dc96..f0e6298 100644 --- a/expand.c +++ b/expand.c @@ -125,5 +125,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/expr.c b/expr.c index 608d9a8..4570b33 100644 --- a/expr.c +++ b/expr.c @@ -258,8 +258,11 @@ main(int argc, char *argv[]) int ret; argv0 = argv[0], argc--, argv++; + ret = !parse(argv, argc); - enfshut(3, stdout, ""); + + if (fshut(stdout, "")) + ret = 3; return ret; } diff --git a/find.c b/find.c index cb437ba..dcefca5 100644 --- a/find.c +++ b/find.c @@ -1036,5 +1036,7 @@ main(int argc, char **argv) t->u.pinfo->freearg(t->extra); free(toks); - return !!(fshut(stdin, "") + fshut(stdout, "")) || gflags.ret; + gflags.ret |= fshut(stdin, "") | fshut(stdout, ""); + + return gflags.ret; } diff --git a/fold.c b/fold.c index 8019125..ce59488 100644 --- a/fold.c +++ b/fold.c @@ -110,5 +110,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/grep.c b/grep.c index 5836eaa..6e8daef 100644 --- a/grep.c +++ b/grep.c @@ -277,7 +277,8 @@ main(int argc, char *argv[]) } } - enfshut(Error, stdin, ""); - enfshut(Error, stdout, ""); + if (fshut(stdin, "") | fshut(stdout, "")) + match = Error; + return match; } diff --git a/head.c b/head.c index bb6b180..24cd1f9 100644 --- a/head.c +++ b/head.c @@ -71,5 +71,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/join.c b/join.c index 572bed0..b2fd07e 100644 --- a/join.c +++ b/join.c @@ -477,7 +477,7 @@ main(int argc, char *argv[]) { size_t jf[2] = { jfield, jfield, }; FILE *fp[2]; - int n; + int ret = 0, n; char *fno; ARGBEGIN { @@ -544,9 +544,9 @@ main(int argc, char *argv[]) if (oflag) freespecs(&output); - enfshut(2, fp[0], argv[0]); - if (fp[0] != fp[1]) - enfshut(2, fp[1], argv[1]); - enfshut(2, stdout, ""); - return 0; + if (fshut(fp[0], argv[0]) | (fp[0] != fp[1] && fshut(fp[1], argv[1])) | + fshut(stdout, "")) + ret = 2; + + return ret; } diff --git a/md5sum.c b/md5sum.c index 7aeb9e1..ade4c97 100644 --- a/md5sum.c +++ b/md5sum.c @@ -24,7 +24,7 @@ usage(void) int main(int argc, char *argv[]) { - int (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; + int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; uint8_t md[MD5_DIGEST_LENGTH]; ARGBEGIN { @@ -35,6 +35,8 @@ main(int argc, char *argv[]) usage(); } ARGEND; - return cryptfunc(argc, argv, &md5_ops, md, sizeof(md)) || - !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= cryptfunc(argc, argv, &md5_ops, md, sizeof(md)); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/nl.c b/nl.c index 3685221..aa566ec 100644 --- a/nl.c +++ b/nl.c @@ -113,6 +113,7 @@ main(int argc, char *argv[]) { FILE *fp = NULL; size_t l, s; + int ret = 0; char *d, *formattype, *formatblit; ARGBEGIN { @@ -199,6 +200,8 @@ main(int argc, char *argv[]) nl(argv[0], fp); } - return !!((fp && fp != stdin && fshut(fp, argv[0])) - + fshut(stdin, "") + fshut(stdout, "")); + ret |= fp && fp != stdin && fshut(fp, argv[0]); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/paste.c b/paste.c index 417d93c..7f7fb81 100644 --- a/paste.c +++ b/paste.c @@ -133,7 +133,9 @@ main(int argc, char *argv[]) for (i = 0; i < argc; i++) if (dsc[i].fp != stdin && fshut(dsc[i].fp, argv[i])) - ret = 1; + ret |= fshut(dsc[i].fp, argv[i]); - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sed.c b/sed.c index 586cecb..b8e4be2 100644 --- a/sed.c +++ b/sed.c @@ -1682,7 +1682,7 @@ int main(int argc, char *argv[]) { char *arg; - int script = 0; + int ret = 0, script = 0; ARGBEGIN { case 'n': @@ -1717,5 +1717,7 @@ main(int argc, char *argv[]) files = argv; run(); - return !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sha1sum.c b/sha1sum.c index 6a564e5..9743ee9 100644 --- a/sha1sum.c +++ b/sha1sum.c @@ -23,7 +23,7 @@ usage(void) int main(int argc, char *argv[]) { - int (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; + int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; uint8_t md[SHA1_DIGEST_LENGTH]; ARGBEGIN { @@ -34,6 +34,8 @@ main(int argc, char *argv[]) usage(); } ARGEND; - return cryptfunc(argc, argv, &sha1_ops, md, sizeof(md)) || - !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= cryptfunc(argc, argv, &sha1_ops, md, sizeof(md)); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sha256sum.c b/sha256sum.c index 3c898c7..57fc977 100644 --- a/sha256sum.c +++ b/sha256sum.c @@ -23,7 +23,7 @@ usage(void) int main(int argc, char *argv[]) { - int (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; + int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; uint8_t md[SHA256_DIGEST_LENGTH]; ARGBEGIN { @@ -34,6 +34,8 @@ main(int argc, char *argv[]) usage(); } ARGEND; - return cryptfunc(argc, argv, &sha256_ops, md, sizeof(md)) || - !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= cryptfunc(argc, argv, &sha256_ops, md, sizeof(md)); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sha512sum.c b/sha512sum.c index 7dd547b..3b7594a 100644 --- a/sha512sum.c +++ b/sha512sum.c @@ -23,7 +23,7 @@ usage(void) int main(int argc, char *argv[]) { - int (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; + int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain; uint8_t md[SHA512_DIGEST_LENGTH]; ARGBEGIN { @@ -34,6 +34,8 @@ main(int argc, char *argv[]) usage(); } ARGEND; - return cryptfunc(argc, argv, &sha512_ops, md, sizeof(md)) || - !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= cryptfunc(argc, argv, &sha512_ops, md, sizeof(md)); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sort.c b/sort.c index f98a428..c3bab4f 100644 --- a/sort.c +++ b/sort.c @@ -332,7 +332,8 @@ main(int argc, char *argv[]) } } - enfshut(2, stdin, ""); - enfshut(2, stdout, ""); + if (fshut(stdin, "") | fshut(stdout, "")) + ret = 2; + return ret; } diff --git a/split.c b/split.c index c4c777d..c5bd82d 100644 --- a/split.c +++ b/split.c @@ -50,7 +50,7 @@ main(int argc, char *argv[]) FILE *in = stdin, *out = NULL; size_t size = 1000, scale = 1, n; long l; - int ch, plen, slen = 2, always = 0; + int ret = 0, ch, plen, slen = 2, always = 0; char name[NAME_MAX + 1], *prefix = "x", *file = NULL, *tmp, *end; ARGBEGIN { @@ -124,6 +124,9 @@ main(int argc, char *argv[]) putc(ch, out); } - return !!(fshut(in, "") + (out && fshut(out, "")) + - fshut(stdin, "") + fshut(stdout, "")); + ret |= (in != stdin) && fshut(in, ""); + ret |= out && (out != stdout) && fshut(out, ""); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/sponge.c b/sponge.c index a2861a0..baeac7f 100644 --- a/sponge.c +++ b/sponge.c @@ -14,6 +14,7 @@ int main(int argc, char *argv[]) { FILE *fp, *tmpfp; + int ret = 0; argv0 = argv[0], argc--, argv++; @@ -29,5 +30,7 @@ main(int argc, char *argv[]) eprintf("fopen %s:", argv[0]); concat(tmpfp, "", fp, argv[0]); - return !!(fshut(fp, argv[0]) + fshut(tmpfp, "")); + ret |= fshut(fp, argv[0]) | fshut(tmpfp, ""); + + return ret; } diff --git a/strings.c b/strings.c index 0a14c20..a3d722f 100644 --- a/strings.c +++ b/strings.c @@ -94,5 +94,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/tail.c b/tail.c index 0667877..306bbc1 100644 --- a/tail.c +++ b/tail.c @@ -47,7 +47,7 @@ taketail(FILE *fp, const char *str, size_t n) ring = ecalloc(n, sizeof(*ring)); size = ecalloc(n, sizeof(*size)); - for (i = j = 0; getline(&ring[i], &size[i], fp) > 0; ) + for (i = j = 0; getline(ring + i, size + i, fp) > 0; ) i = j = (i + 1) % n; } else { r = ecalloc(n, sizeof(*r)); @@ -157,5 +157,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/tee.c b/tee.c index c0ad6f2..260b964 100644 --- a/tee.c +++ b/tee.c @@ -15,7 +15,7 @@ main(int argc, char *argv[]) { FILE **fps = NULL; size_t i, n, nfps; - int aflag = 0, iflag = 0; + int ret = 0, aflag = 0, iflag = 0; char buf[BUFSIZ]; ARGBEGIN { @@ -47,5 +47,7 @@ main(int argc, char *argv[]) } } - return !!(fshut(stdin, "") + fshut(stdout, "")); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/tr.c b/tr.c index ad5c690..cc35a57 100644 --- a/tr.c +++ b/tr.c @@ -174,6 +174,7 @@ main(int argc, char *argv[]) { Rune r = 0, lastrune = 0; size_t off1, off2, i, m; + int ret = 0; ARGBEGIN { case 'c': @@ -204,8 +205,10 @@ main(int argc, char *argv[]) if (set2check && cflag && !dflag) eprintf("set2 can't be imaged to from a complement.\n"); read: - if (!efgetrune(&r, stdin, "")) - return !!(fshut(stdin, "") + fshut(stdout, "")); + if (!efgetrune(&r, stdin, "")) { + ret |= fshut(stdin, "") | fshut(stdout, ""); + return ret; + } off1 = off2 = 0; for (i = 0; i < set1ranges; i++) { if (set1[i].start <= r && r <= set1[i].end) { diff --git a/unexpand.c b/unexpand.c index c107dbf..56aa5e2 100644 --- a/unexpand.c +++ b/unexpand.c @@ -168,7 +168,7 @@ main(int argc, char *argv[]) } } - efshut(stdin, ""); - efshut(stdout, ""); + ret |= fshut(stdin, "") | fshut(stdout, ""); + return ret; } diff --git a/uniq.c b/uniq.c index 1b30c1a..0476d34 100644 --- a/uniq.c +++ b/uniq.c @@ -97,7 +97,7 @@ int main(int argc, char *argv[]) { FILE *fp[2] = { stdin, stdout }; - int i; + int ret = 0, i; char *fname[2] = { "", "" }; ARGBEGIN { @@ -134,7 +134,7 @@ main(int argc, char *argv[]) uniq(fp[0], fp[1]); uniqfinish(fp[1]); - efshut(fp[0], fname[0]); - efshut(fp[1], fname[1]); - return 0; + ret |= fshut(fp[0], fname[0]) | fshut(fp[1], fname[1]); + + return ret; } diff --git a/uudecode.c b/uudecode.c index 7140db7..41636ce 100644 --- a/uudecode.c +++ b/uudecode.c @@ -228,6 +228,7 @@ main(int argc, char *argv[]) { FILE *fp = NULL, *nfp = NULL; mode_t mode = 0; + int ret = 0; char *fname, *header, *ifname, *ofname = NULL; void (*d) (FILE *, FILE *) = NULL; @@ -274,6 +275,8 @@ main(int argc, char *argv[]) if (nfp != stdout && chmod(fname, mode) < 0) eprintf("chmod %s:", fname); - return !!(fshut(fp, fp == stdin ? "" : argv[0]) + - fshut(nfp, nfp == stdout ? "" : fname)); + ret |= fshut(fp, (fp == stdin) ? "" : argv[0]); + ret |= fshut(nfp, (nfp == stdout) ? "" : fname); + + return ret; } diff --git a/uuencode.c b/uuencode.c index b4332e4..c560f92 100644 --- a/uuencode.c +++ b/uuencode.c @@ -102,6 +102,7 @@ main(int argc, char *argv[]) { FILE *fp = NULL; void (*uuencode_f)(FILE *, const char *, const char *) = uuencode; + int ret = 0; ARGBEGIN { case 'm': @@ -122,6 +123,8 @@ main(int argc, char *argv[]) uuencode_f(fp, argv[1], argv[0]); } - return !!((fp && fshut(fp, argv[0])) + fshut(stdin, "") + - fshut(stdout, "")); + ret |= fp && fshut(fp, argv[0]); + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/wc.c b/wc.c index 8870761..6b8631a 100644 --- a/wc.c +++ b/wc.c @@ -102,5 +102,7 @@ main(int argc, char *argv[]) output("total", tc, tl, tw); } - return !!(fshut(stdin, "") + fshut(stdout, "")) || ret; + ret |= fshut(stdin, "") | fshut(stdout, ""); + + return ret; } diff --git a/xargs.c b/xargs.c index f64400c..34c82be 100644 --- a/xargs.c +++ b/xargs.c @@ -194,7 +194,7 @@ usage(void) int main(int argc, char *argv[]) { - int leftover = 0, i; + int ret = 0, leftover = 0, i; size_t argsz, argmaxsz; size_t arglen, a; char *arg = ""; @@ -272,6 +272,8 @@ main(int argc, char *argv[]) free(argb); - return (nerrors || !!(fshut(stdin, "") + - fshut(stdout, ""))) ? 123 : 0; + if (nerrors || (fshut(stdin, "") | fshut(stdout, ""))) + ret = 123; + + return ret; }