summaryrefslogtreecommitdiff
path: root/src/commands/tee.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/tee.c')
-rw-r--r--src/commands/tee.c81
1 files changed, 0 insertions, 81 deletions
diff --git a/src/commands/tee.c b/src/commands/tee.c
deleted file mode 100644
index b9b31be..0000000
--- a/src/commands/tee.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "../command.h"
-
-#include <signal.h>
-
-static struct {
- bool append;
- bool handle_sigint;
-} flags;
-
-static void help(void) {
- printf("Usage: tee [-ai] [FILE]...\n\n");
- printf("Copy stdin to each FILE, and also to stdout\n\n");
- printf("\t-a Append to the given FILEs, don't overwrite\n");
- printf("\t-i Ignore interrupt signals (SIGINT)\n");
- exit(EXIT_SUCCESS);
-}
-
-static void handle(int dummy){UNUSED(dummy);}
-
-static void run_tee(int file_count, FILE** files) {
- char c;
- int i;
-
- while((c = getchar()) != EOF) {
- int i;
- for (i = 0; i < file_count; i++) {
- fwrite(&c, 1, 1, files[i]);
- fflush(files[i]);
- }
- putchar(c);
- }
-
- for (i = 0; i < file_count; i++) {
- fclose(files[i]);
- }
-}
-
-static int short_arg(char c, char* next) {
- UNUSED(next);
- switch (c) {
- case 'a':
- flags.append = true;
- break;
- case 'i':
- flags.handle_sigint = true;
- break;
- default:
- return ARG_INVALID;
- }
- return ARG_UNUSED;
-}
-
-COMMAND(tee) {
-
- int start, i;
- FILE** files;
-
- flags.append = false;
- flags.handle_sigint = false;
-
- start = parse_args(argc, argv, help, short_arg, NULL);
-
- if (flags.handle_sigint) {
- signal(SIGINT, handle);
- }
-
- if (argc - start < 1) {
- run_tee(0, NULL);
- return EXIT_SUCCESS;
- }
-
- files = malloc(sizeof(FILE*) * (argc - start));
-
- for (i = start; i < argc; i++) {
- FILE* file = get_file(argv[i], flags.append ? "a" : "w");
- files[i - start] = file;
- }
-
- run_tee(argc - start, files);
- return EXIT_SUCCESS;
-}