diff --git a/tee.c b/tee.c index 399824c..35e3db5 100644 --- a/tee.c +++ b/tee.c @@ -34,20 +34,28 @@ main(int argc, char *argv[]) nfps = argc + 1; fps = ecalloc(nfps, sizeof(*fps)); - for (i = 0; i < argc; i++) - if (!(fps[i] = fopen(argv[i], aflag ? "a" : "w"))) - eprintf("fopen %s:", argv[i]); + for (i = 0; i < argc; i++) { + if (!(fps[i] = fopen(argv[i], aflag ? "a" : "w"))) { + weprintf("fopen %s:", argv[i]); + ret = 1; + } + } fps[i] = stdout; while ((n = fread(buf, 1, sizeof(buf), stdin))) { for (i = 0; i < nfps; i++) { - if (fwrite(buf, 1, n, fps[i]) == n) - continue; - eprintf("fwrite %s:", (i != argc) ? argv[i] : ""); + if (fps[i] && fwrite(buf, 1, n, fps[i]) != n) { + fshut(fps[i], (i != argc) ? argv[i] : ""); + fps[i] = NULL; + ret = 1; + } } } - ret |= fshut(stdin, "") | fshut(stdout, ""); + ret |= fshut(stdin, ""); + for (i = 0; i < nfps; i++) + if (fps[i]) + ret |= fshut(fps[i], (i != argc) ? argv[i] : ""); return ret; }