Magellan Linux

Annotation of /tags/mkinitrd-6_3_1/busybox/coreutils/catv.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
Original Path: trunk/mkinitrd-magellan/busybox/coreutils/catv.c
File MIME type: text/plain
File size: 1450 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * cat -v implementation for busybox
4     *
5     * Copyright (C) 2006 Rob Landley <rob@landley.net>
6     *
7     * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8     */
9    
10     /* See "Cat -v considered harmful" at
11     * http://cm.bell-labs.com/cm/cs/doc/84/kp.ps.gz */
12    
13     #include "busybox.h"
14    
15     int catv_main(int argc, char **argv)
16     {
17     int retval = EXIT_SUCCESS, fd;
18     unsigned flags;
19    
20     flags = getopt32(argc, argv, "etv");
21     #define CATV_OPT_e (1<<0)
22     #define CATV_OPT_t (1<<1)
23     #define CATV_OPT_v (1<<2)
24     flags ^= CATV_OPT_v;
25    
26     argv += optind;
27     do {
28     /* Read from stdin if there's nothing else to do. */
29     fd = 0;
30     if (*argv && 0 > (fd = xopen(*argv, O_RDONLY)))
31     retval = EXIT_FAILURE;
32     else for (;;) {
33     int i, res;
34    
35     res = read(fd, bb_common_bufsiz1, sizeof(bb_common_bufsiz1));
36     if (res < 0)
37     retval = EXIT_FAILURE;
38     if (res < 1)
39     break;
40     for (i = 0; i < res; i++) {
41     char c = bb_common_bufsiz1[i];
42    
43     if (c > 126 && (flags & CATV_OPT_v)) {
44     if (c == 127) {
45     printf("^?");
46     continue;
47     } else {
48     printf("M-");
49     c -= 128;
50     }
51     }
52     if (c < 32) {
53     if (c == 10) {
54     if (flags & CATV_OPT_e)
55     putchar('$');
56     } else if (flags & (c==9 ? CATV_OPT_t : CATV_OPT_v)) {
57     printf("^%c", c+'@');
58     continue;
59     }
60     }
61     putchar(c);
62     }
63     }
64     if (ENABLE_FEATURE_CLEAN_UP && fd)
65     close(fd);
66     } while (*++argv);
67    
68     fflush_stdout_and_exit(retval);
69     }