aboutsummaryrefslogtreecommitdiff
path: root/toys/tee.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/tee.c')
-rw-r--r--toys/tee.c75
1 files changed, 0 insertions, 75 deletions
diff --git a/toys/tee.c b/toys/tee.c
deleted file mode 100644
index c11fb5c4..00000000
--- a/toys/tee.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* vi: set sw=4 ts=4:
- *
- * tee.c - cat to multiple outputs.
- *
- * Copyright 2008 Rob Landley <rob@landley.net>
- *
- * See http://www.opengroup.org/onlinepubs/009695399/utilities/tee.html
-
-USE_TEE(NEWTOY(tee, "ia", TOYFLAG_BIN))
-
-config TEE
- bool "tee"
- default y
- help
- usage: tee [-ai] [file...]
-
- Copy stdin to each listed file, and also to stdout.
- Filename "-" is a synonym for stdout.
-
- -a append to files.
- -i ignore SIGINT.
-*/
-
-#include "toys.h"
-
-DEFINE_GLOBALS(
- void *outputs;
-)
-
-#define TT this.tee
-
-struct fd_list {
- struct fd_list *next;
- int fd;
-};
-
-// Open each output file, saving filehandles to a linked list.
-
-static void do_tee_open(int fd, char *name)
-{
- struct fd_list *temp;
-
- temp = xmalloc(sizeof(struct fd_list));
- temp->next = TT.outputs;
- temp->fd = fd;
- TT.outputs = temp;
-}
-
-void tee_main(void)
-{
- if (toys.optflags&2) signal(SIGINT, SIG_IGN);
-
- // Open output files
- loopfiles_rw(toys.optargs,
- O_RDWR|O_CREAT|((toys.optflags&1)?O_APPEND:O_TRUNC), 0666, 0,
- do_tee_open);
-
- for (;;) {
- struct fd_list *fdl;
- int len;
-
- // 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;
- if (!fdl) break;
- fdl = fdl->next;
- }
- }
-
-}