diff options
author | Paul Fox | 2005-11-28 21:06:00 +0000 |
---|---|---|
committer | Paul Fox | 2005-11-28 21:06:00 +0000 |
commit | 969af897970b493f2615a233f7c83ca86a6d488f (patch) | |
tree | e0d404c3b121062ca58a92aba8111c4863082f14 | |
parent | d957b9537ee2b93af93c92dbb8a2a6cfc3682318 (diff) | |
download | busybox-969af897970b493f2615a233f7c83ca86a6d488f.zip busybox-969af897970b493f2615a233f7c83ca86a6d488f.tar.gz |
add "-C" format to hexdump
fixes bug #113 and satisfies a personal need at the same time.
output compares identically to util-linux version. (with
exception of whitespace differences on last lines of output with
non-uniform length, which are neither fixed nor worsened by this
change.)
-rw-r--r-- | include/usage.h | 3 | ||||
-rw-r--r-- | util-linux/hexdump.c | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/include/usage.h b/include/usage.h index ab0bb4c..912a88f 100644 --- a/include/usage.h +++ b/include/usage.h @@ -1087,13 +1087,14 @@ "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n" #define hexdump_trivial_usage \ - "[-[bcdefnosvx]] [OPTION] FILE" + "[-[bcCdefnosvx]] [OPTION] FILE" #define hexdump_full_usage \ "The hexdump utility is a filter which displays the specified files,\n" \ "or the standard input, if no files are specified, in a user specified\n" \ "format\n" \ "\t-b\t\tOne-byte octal display\n" \ "\t-c\t\tOne-byte character display\n" \ + "\t-C\t\tCanonical hex+ASCII, 16 bytes per line\n" \ "\t-d\t\tTwo-byte decimal display\n" \ "\t-e FORMAT STRING\n" \ "\t-f FORMAT FILE\n" \ diff --git a/util-linux/hexdump.c b/util-linux/hexdump.c index 1858b08..e2cbcaf 100644 --- a/util-linux/hexdump.c +++ b/util-linux/hexdump.c @@ -57,7 +57,7 @@ static const char * const add_strings[] = { static const char add_first[] = "\"%07.7_Ax\n\""; -static const char hexdump_opts[] = "bcdoxe:f:n:s:v"; +static const char hexdump_opts[] = "bcdoxCe:f:n:s:v"; static const struct suffix_mult suffixes[] = { {"b", 512 }, @@ -80,6 +80,10 @@ int hexdump_main(int argc, char **argv) if ((p - hexdump_opts) < 5) { bb_dump_add(add_first); bb_dump_add(add_strings[(int)(p - hexdump_opts)]); + } else if (ch == 'C') { + bb_dump_add("\"%08.8_Ax\n\""); + bb_dump_add("\"%08.8_ax \" 8/1 \"%02x \" \" \" 8/1 \"%02x \" "); + bb_dump_add("\" |\" 16/1 \"%_p\" \"|\\n\""); } else { /* Sae a little bit of space below by omitting the 'else's. */ if (ch == 'e') { |