diff options
Diffstat (limited to 'toys/posix/tee.c')
-rw-r--r-- | toys/posix/tee.c | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/toys/posix/tee.c b/toys/posix/tee.c index e6342f4c..03885109 100644 --- a/toys/posix/tee.c +++ b/toys/posix/tee.c @@ -1,6 +1,4 @@ -/* vi: set sw=4 ts=4: - * - * tee.c - cat to multiple outputs. +/* tee.c - cat to multiple outputs. * * Copyright 2008 Rob Landley <rob@landley.net> * @@ -9,66 +7,65 @@ USE_TEE(NEWTOY(tee, "ia", TOYFLAG_BIN)) config TEE - bool "tee" - default y - help - usage: tee [-ai] [file...] + 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. + Copy stdin to each listed file, and also to stdout. + Filename "-" is a synonym for stdout. - -a append to files. - -i ignore SIGINT. + -a append to files. + -i ignore SIGINT. */ #define FOR_tee #include "toys.h" GLOBALS( - void *outputs; + void *outputs; ) struct fd_list { - struct fd_list *next; - int fd; + 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; + struct fd_list *temp; - temp = xmalloc(sizeof(struct fd_list)); - temp->next = TT.outputs; - temp->fd = fd; - TT.outputs = temp; + temp = xmalloc(sizeof(struct fd_list)); + temp->next = TT.outputs; + temp->fd = fd; + TT.outputs = temp; } void tee_main(void) { - if (toys.optflags & FLAG_i) signal(SIGINT, SIG_IGN); + if (toys.optflags & FLAG_i) signal(SIGINT, SIG_IGN); - // Open output files - loopfiles_rw(toys.optargs, - O_RDWR|O_CREAT|((toys.optflags & FLAG_a)?O_APPEND:O_TRUNC), - 0666, 0, do_tee_open); + // Open output files + loopfiles_rw(toys.optargs, + O_RDWR|O_CREAT|((toys.optflags & FLAG_a)?O_APPEND:O_TRUNC), + 0666, 0, do_tee_open); - for (;;) { - struct fd_list *fdl; - int len; + for (;;) { + struct fd_list *fdl; + int len; - // Read data from stdin - len = xread(0, toybuf, sizeof(toybuf)); - if (len<1) break; + // 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; - } + // 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; } - + } } |