diff options
Diffstat (limited to 'coreutils/catv.c')
-rw-r--r-- | coreutils/catv.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/coreutils/catv.c b/coreutils/catv.c index e182039..f8229c2 100644 --- a/coreutils/catv.c +++ b/coreutils/catv.c @@ -14,49 +14,55 @@ int catv_main(int argc, char **argv) { - int retval = EXIT_SUCCESS, fd, flags; + int retval = EXIT_SUCCESS, fd; + unsigned long flags; flags = bb_getopt_ulflags(argc, argv, "etv"); - flags ^= 4; - - // Loop through files. +#define CATV_OPT_e (1<<0) +#define CATV_OPT_t (1<<1) +#define CATV_OPT_v (1<<2) + flags ^= CATV_OPT_v; argv += optind; do { - // Read from stdin if there's nothing else to 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(;;) { + if (*argv && 0 > (fd = xopen(*argv, O_RDONLY))) + retval = EXIT_FAILURE; + else for (;;) { int i, res; res = read(fd, bb_common_bufsiz1, sizeof(bb_common_bufsiz1)); - if (res < 0) retval = EXIT_FAILURE; - if (res <1) break; - for (i=0; i<res; i++) { - char c=bb_common_bufsiz1[i]; + if (res < 0) + retval = EXIT_FAILURE; + if (res < 1) + break; + for (i = 0; i < res; i++) { + char c = bb_common_bufsiz1[i]; - if (c > 126 && (flags & 4)) { + if (c > 126 && (flags & CATV_OPT_v)) { if (c == 127) { - printf("^?"); + bb_printf("^?"); continue; } else { - printf("M-"); + bb_printf("M-"); c -= 128; } } if (c < 32) { if (c == 10) { - if (flags & 1) putchar('$'); - } else if (flags & (c==9 ? 2 : 4)) { - printf("^%c", c+'@'); + if (flags & CATV_OPT_e) + putchar('$'); + } else if (flags & (c==9 ? CATV_OPT_t : CATV_OPT_v)) { + bb_printf("^%c", c+'@'); continue; } } putchar(c); } } - if (ENABLE_FEATURE_CLEAN_UP && fd) close(fd); + if (ENABLE_FEATURE_CLEAN_UP && fd) + close(fd); } while (*++argv); return retval; |