X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Ftee.c;h=018fe117bed77627a57df69cefcd4d5315c455de;hb=cbb0a4b40d32a653957d2c9ecb6fe1a70b30d907;hp=8d1ca6efd49e7dd21467ecca03776df384ad5258;hpb=2cb55077e2f65f17dbc8933eec47760bcc2a6ba1;p=oweals%2Fbusybox.git diff --git a/coreutils/tee.c b/coreutils/tee.c index 8d1ca6efd..018fe117b 100644 --- a/coreutils/tee.c +++ b/coreutils/tee.c @@ -1,3 +1,4 @@ +/* vi: set sw=4 ts=4: */ /* * Mini tee implementation for busybox * @@ -22,105 +23,112 @@ */ #include "internal.h" +#include #include static const char tee_usage[] = - "tee [OPTION]... [FILE]...\n\n" - "Copy standard input to each FILE, and also to standard output.\n\n" - "Options:\n" - "\t-a\tappend to the given FILEs, do not overwrite\n" + "tee [OPTION]... [FILE]...\n\n" + "Copy standard input to each FILE, and also to standard output.\n\n" + "Options:\n" "\t-a\tappend to the given FILEs, do not overwrite\n" #if 0 - "\t-i\tignore interrupt signals\n" + "\t-i\tignore interrupt signals\n" #endif - ; +; /* FileList _______________________________________________________________ */ #define FL_MAX 1024 -static FILE *FileList[FL_MAX]; -static int FL_end; +static FILE **FileList; +static int FL_end; + +typedef void (FL_Function) (FILE * file, char c); -typedef void (FL_Function)(FILE *file, char c); - /* apply a function to everything in FileList */ -static void -FL_apply(FL_Function *f, char c) +static void FL_apply(FL_Function * f, char c) { - int i; - for (i = 0; i <= FL_end; i++) { - f(FileList[i], c); - } + int i; + + for (i = 0; i <= FL_end; i++) { + f(FileList[i], c); + } } /* FL_Function for writing to files*/ -static void -tee_fwrite(FILE *file, char c) +static void tee_fwrite(FILE * file, char c) { - fputc(c, file); + fputc(c, file); } /* FL_Function for closing files */ -static void -tee_fclose(FILE *file, char c) +static void tee_fclose(FILE * file, char c) { - fclose(file); + fclose(file); } /* ________________________________________________________________________ */ /* BusyBoxed tee(1) */ -int -tee_main(int argc, char **argv) +int tee_main(int argc, char **argv) { - int i; - char c; - char opt; - char opt_fopen[2] = "w"; - FILE *file; - - /* parse argv[] */ - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - opt = argv[i][1]; - switch (opt) { - case 'a': - opt_fopen[0] = 'a'; - break; + int i; + char c; + char opt; + char opt_fopen[2] = "w"; + FILE *file; + + /* parse argv[] */ + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + opt = argv[i][1]; + switch (opt) { + case 'a': + opt_fopen[0] = 'a'; + break; #if 0 - case 'i': - fprintf(stderr, "ignore interrupt not implemented\n"); - break; + case 'i': + fprintf(stderr, "ignore interrupt not implemented\n"); + break; #endif - default: - usage(tee_usage); - } - } else { - break; + default: + usage(tee_usage); + } + } else { + break; + } } - } - - /* init FILE pointers */ - FL_end = 0; - FileList[0] = stdout; - for ( ; i < argc; i++) { - /* add a file to FileList */ - file = fopen(argv[i], opt_fopen); - if (!file) { continue; } - if (FL_end < FL_MAX) { - FileList[++FL_end] = file; + + /* init FILE pointers */ + FileList = calloc(FL_MAX, sizeof(FILE*)); + if (!FileList) { + fprintf(stderr, "tee: %s\n", strerror(errno)); + exit(1); + } + FL_end = 0; + FileList[0] = stdout; + for (; i < argc; i++) { + /* add a file to FileList */ + file = fopen(argv[i], opt_fopen); + if (!file) { + continue; + } + if (FL_end < FL_MAX) { + FileList[++FL_end] = file; + } } - } - /* read and redirect */ - while ((c = (char) getchar()) && (!feof(stdin))) { - FL_apply(tee_fwrite, c); - } + /* read and redirect */ + while ((c = (char) getchar()) && (!feof(stdin))) { + FL_apply(tee_fwrite, c); + } - /* clean up */ - FL_apply(tee_fclose, 0); - exit(0); + /* clean up */ + FL_apply(tee_fclose, 0); + /* Don't bother to close files Exit does that + * automagically, so we can save a few bytes */ + /* free(FileList); */ + exit(0); } -/* $Id: tee.c,v 1.4 1999/12/10 08:25:07 andersen Exp $ */ +/* $Id: tee.c,v 1.8 2000/03/23 01:09:18 erik Exp $ */