diff --git a/cat.c b/cat.c index c36657d..e3741aa 100644 --- a/cat.c +++ b/cat.c @@ -6,6 +6,16 @@ #include "text.h" #include "util.h" +static void +uconcat(FILE *fp1, const char *s1, FILE *fp2, const char *s2) +{ + int c; + + setbuf(fp2, NULL); + while ((c = getc(fp1)) != EOF) + putc(c, fp2); +} + static void usage(void) { @@ -17,17 +27,18 @@ main(int argc, char *argv[]) { FILE *fp; int ret = 0; + void (*cat)(FILE *, const char *, FILE *, const char *) = &concat; ARGBEGIN { case 'u': - setbuf(stdout, NULL); + cat = &uconcat; break; default: usage(); } ARGEND if (!argc) { - concat(stdin, "", stdout, ""); + cat(stdin, "", stdout, ""); } else { for (; *argv; argc--, argv++) { if (!strcmp(*argv, "-")) { @@ -38,7 +49,7 @@ main(int argc, char *argv[]) ret = 1; continue; } - concat(fp, *argv, stdout, ""); + cat(fp, *argv, stdout, ""); if (fp != stdin && fshut(fp, *argv)) ret = 1; }