diff options
Diffstat (limited to 'toys/catv.c')
-rw-r--r-- | toys/catv.c | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/toys/catv.c b/toys/catv.c index 161ca514..74242010 100644 --- a/toys/catv.c +++ b/toys/catv.c @@ -10,51 +10,45 @@ #include "toys.h" -int catv_main(void) -{ - int retval = 0, fd; - char **argv = toys.optargs; - - toys.optflags^=4; +// Callback function for loopfiles() - // Loop through files. - - do { - // Read from stdin if there's nothing else to do. - - fd = 0; - if (*argv && 0>(fd = xopen(*argv, O_RDONLY))) retval = EXIT_FAILURE; - else for(;;) { - int i, res; - - res = read(fd, toybuf, sizeof(toybuf)); - if (res < 0) retval = EXIT_FAILURE; - if (res < 1) break; - for (i=0; i<res; i++) { - char c=toybuf[i]; - - if (c > 126 && (toys.optflags & 4)) { - if (c == 127) { - printf("^?"); - continue; - } else { - printf("M-"); - c -= 128; - } +void do_catv(int fd, char *name) +{ + for(;;) { + int i, len; + + len = read(fd, toybuf, sizeof(toybuf)); + if (len < 0) toys.exitval = EXIT_FAILURE; + if (len < 1) break; + for (i=0; i<len; i++) { + char c=toybuf[i]; + + if (c > 126 && (toys.optflags & 4)) { + if (c == 127) { + printf("^?"); + continue; + } else { + printf("M-"); + c -= 128; } - if (c < 32) { - if (c == 10) { - if (toys.optflags & 1) putchar('$'); - } else if (toys.optflags & (c==9 ? 2 : 4)) { - printf("^%c", c+'@'); - continue; - } + } + if (c < 32) { + if (c == 10) { + if (toys.optflags & 1) putchar('$'); + } else if (toys.optflags & (c==9 ? 2 : 4)) { + printf("^%c", c+'@'); + continue; } - putchar(c); } + putchar(c); } - if (CFG_TOYBOX_FREE && fd) close(fd); - } while (*++argv); + } +} + +int catv_main(void) +{ + toys.optflags^=4; + loopfiles(toys.optargs, do_catv); - return retval; + return toys.exitval; } |