diff options
Diffstat (limited to 'src/kat.c')
-rw-r--r-- | src/kat.c | 36 |
1 files changed, 4 insertions, 32 deletions
@@ -4,7 +4,7 @@ #include <unistd.h> #include "util/versie.h" -#include "util/loop_args.h" +#include "util/loop_files.h" #include "io/read_file.h" static void usage(FILE *f) { @@ -40,44 +40,16 @@ static char** parse_options(int argc, char **argv) { return argv + optind; } -static void process(struct filebuf *fb) { +static int process(struct filebuf *fb, char*, bool) { fwrite(fb->buf, 1, fb->sz, stdout); free_filebuf(fb); + return 0; } // TODO: be smarter, kat doesn't have to read the whole file in memory (for // unmappable files) -static int handle(char *arg, bool isstdin) { - struct filebuf *fb = NULL; - - if (isstdin) { - fb = stream_to_filebuf(stdin, 0); - if (fb == NULL) goto err_stdin; - } else { - bool isdir = false; - fb = file_to_filebuf(arg, 0, &isdir); - if (isdir) goto err_isdir; - else if (fb == NULL) goto err_file; - } - - process(fb); - return 0; - -err_stdin: - fprintf(stderr, "kat: fout bij lezen van standaard invoer\n"); - return 1; - -err_file: - fprintf(stderr, "kat: fout bij lezen van bestand\n"); - return 1; - -err_isdir: - fprintf(stderr, "kat: bestand '%s' is een mapje\n", arg); - return -1; -} - int entry_kat(int argc, char **argv) { char **args = parse_options(argc, argv); - return loop_args(args, handle); + return loop_files(args, process); } |