Annotation of /trunk/mkinitrd-magellan/busybox/util-linux/hexdump.c
Parent Directory | Revision Log
Revision 532 -
(hide annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 2250 byte(s)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 2250 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 | * hexdump implementation for busybox | ||
4 | * Based on code from util-linux v 2.11l | ||
5 | * | ||
6 | * Copyright (c) 1989 | ||
7 | * The Regents of the University of California. All rights reserved. | ||
8 | * | ||
9 | * Licensed under GPLv2 or later, see file License in this tarball for details. | ||
10 | */ | ||
11 | |||
12 | #include "busybox.h" | ||
13 | #include <getopt.h> | ||
14 | #include "dump.h" | ||
15 | |||
16 | static void bb_dump_addfile(char *name) | ||
17 | { | ||
18 | char *p; | ||
19 | FILE *fp; | ||
20 | char *buf; | ||
21 | |||
22 | fp = xfopen(name, "r"); | ||
23 | |||
24 | while ((buf = xmalloc_getline(fp)) != NULL) { | ||
25 | p = skip_whitespace(buf); | ||
26 | |||
27 | if (*p && (*p != '#')) { | ||
28 | bb_dump_add(p); | ||
29 | } | ||
30 | free(buf); | ||
31 | } | ||
32 | fclose(fp); | ||
33 | } | ||
34 | |||
35 | static const char * const add_strings[] = { | ||
36 | "\"%07.7_ax \" 16/1 \"%03o \" \"\\n\"", /* b */ | ||
37 | "\"%07.7_ax \" 16/1 \"%3_c \" \"\\n\"", /* c */ | ||
38 | "\"%07.7_ax \" 8/2 \" %05u \" \"\\n\"", /* d */ | ||
39 | "\"%07.7_ax \" 8/2 \" %06o \" \"\\n\"", /* o */ | ||
40 | "\"%07.7_ax \" 8/2 \" %04x \" \"\\n\"", /* x */ | ||
41 | }; | ||
42 | |||
43 | static const char add_first[] = "\"%07.7_Ax\n\""; | ||
44 | |||
45 | static const char hexdump_opts[] = "bcdoxCe:f:n:s:v"; | ||
46 | |||
47 | static const struct suffix_mult suffixes[] = { | ||
48 | {"b", 512 }, | ||
49 | {"k", 1024 }, | ||
50 | {"m", 1024*1024 }, | ||
51 | {NULL, 0 } | ||
52 | }; | ||
53 | |||
54 | int hexdump_main(int argc, char **argv) | ||
55 | { | ||
56 | const char *p; | ||
57 | int ch; | ||
58 | |||
59 | bb_dump_vflag = FIRST; | ||
60 | bb_dump_length = -1; | ||
61 | |||
62 | while ((ch = getopt(argc, argv, hexdump_opts)) > 0) { | ||
63 | p = strchr(hexdump_opts, ch); | ||
64 | if (!p) | ||
65 | bb_show_usage(); | ||
66 | if ((p - hexdump_opts) < 5) { | ||
67 | bb_dump_add(add_first); | ||
68 | bb_dump_add(add_strings[(int)(p - hexdump_opts)]); | ||
69 | } else if (ch == 'C') { | ||
70 | bb_dump_add("\"%08.8_Ax\n\""); | ||
71 | bb_dump_add("\"%08.8_ax \" 8/1 \"%02x \" \" \" 8/1 \"%02x \" "); | ||
72 | bb_dump_add("\" |\" 16/1 \"%_p\" \"|\\n\""); | ||
73 | } else { | ||
74 | /* Save a little bit of space below by omitting the 'else's. */ | ||
75 | if (ch == 'e') { | ||
76 | bb_dump_add(optarg); | ||
77 | } /* else */ | ||
78 | if (ch == 'f') { | ||
79 | bb_dump_addfile(optarg); | ||
80 | } /* else */ | ||
81 | if (ch == 'n') { | ||
82 | bb_dump_length = xatoi_u(optarg); | ||
83 | } /* else */ | ||
84 | if (ch == 's') { | ||
85 | bb_dump_skip = xatoul_range_sfx(optarg, 0, LONG_MAX, suffixes); | ||
86 | } /* else */ | ||
87 | if (ch == 'v') { | ||
88 | bb_dump_vflag = ALL; | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | |||
93 | if (!bb_dump_fshead) { | ||
94 | bb_dump_add(add_first); | ||
95 | bb_dump_add("\"%07.7_ax \" 8/2 \"%04x \" \"\\n\""); | ||
96 | } | ||
97 | |||
98 | argv += optind; | ||
99 | |||
100 | return bb_dump_dump(argv); | ||
101 | } |