Bugfix: tee with no arguments was writing to stdout twice.

Add basic smoketest while we're at it.
This commit is contained in:
Rob Landley 2019-12-22 20:54:03 -06:00
parent 058471577a
commit f3d4a2c72f
2 changed files with 14 additions and 5 deletions

9
tests/tee.test Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
[ -f testing.sh ] && . testing.sh
#testing "name" "command" "result" "infile" "stdin"
testing "" "tee" "one" "" "one"
testing "" "tee -" "two\n" "" "two\n"
testing "" "tee one > two && cmp one two && echo that" "that\n" "" "three"

View File

@ -54,18 +54,18 @@ void tee_main(void)
for (;;) { for (;;) {
struct fd_list *fdl; struct fd_list *fdl;
int len; int len, out = 0;
// Read data from stdin // Read data from stdin
len = xread(0, toybuf, sizeof(toybuf)); len = xread(0, toybuf, sizeof(toybuf));
if (len<1) break; if (len<1) break;
// Write data to each output file, plus stdout. // Write data to each output file, plus stdout.
fdl = TT.outputs; for (fdl = TT.outputs; ;fdl = fdl->next) {
for (;;) { if (!fdl && out) break;
if(len != writeall(fdl ? fdl->fd : 1, toybuf, len)) toys.exitval=1; if (len != writeall(fdl ? fdl->fd : 1, toybuf, len)) toys.exitval=1;
if (!fdl) break; if (!fdl) break;
fdl = fdl->next; if (fdl->fd == 1) out++;
} }
} }
} }