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