Browse Source

hexdump: code shrink

function                                             old     new   delta
add_format                                             -      50     +50
add_first                                             10       -     -10
hexdump_main                                         401     366     -35
.rodata                                           105306  105255     -51
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/2 up/down: 50/-96)            Total: -46 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Denys Vlasenko 10 months ago
parent
commit
d7814f5727
1 changed files with 14 additions and 10 deletions
  1. 14 10
      util-linux/hexdump.c

+ 14 - 10
util-linux/hexdump.c

@@ -72,14 +72,20 @@ static void bb_dump_addfile(dumper_t *dumper, char *name)
 }
 
 static const char *const add_strings[] ALIGN_PTR = {
-	"\"%07_ax\"16/1 \" %03o\""   "\"\n\"", /* b */
-	"\"%07_ax\"16/1 \" %3_c\""   "\"\n\"", /* c */
-	"\"%07_ax\"8/2 \"   %05u\""  "\"\n\"", /* d */
-	"\"%07_ax\"8/2 \"  %06o\""   "\"\n\"", /* o */
-	"\"%07_ax\"8/2 \"    %04x\"" "\"\n\"", /* x */
+	"16/1 \" %03o"  , /* b */
+	"16/1 \" %3_c"  , /* c */
+	"8/2 \"   %05u" , /* d */
+	"8/2 \"  %06o"  , /* o */
+	"8/2 \"    %04x", /* x */
 };
 
-static const char add_first[] ALIGN1 = "\"%07_Ax\n\"";
+static void add_format(dumper_t *dumper, const char *fmt)
+{
+	char fmtbuf[sizeof("\"%07_ax\"" "%s\"" "\"\n\"") + 16];
+	sprintf(fmtbuf, "\"%%07_ax\"" "%s\"" "\"\n\"", fmt);
+	bb_dump_add(dumper, "\"%07_Ax\n\"");
+	bb_dump_add(dumper, fmtbuf);
+}
 
 static const char hexdump_opts[] ALIGN1 = "bcdoxCe:f:n:s:v";
 
@@ -104,8 +110,7 @@ int hexdump_main(int argc, char **argv)
 		if (!p)
 			bb_show_usage();
 		if ((p - hexdump_opts) < 5) {
-			bb_dump_add(dumper, add_first);
-			bb_dump_add(dumper, add_strings[(int)(p - hexdump_opts)]);
+			add_format(dumper, add_strings[(int)(p - hexdump_opts)]);
 		}
 		/* Save a little bit of space below by omitting the 'else's. */
 		if (ch == 'C') {
@@ -139,8 +144,7 @@ int hexdump_main(int argc, char **argv)
 	}
 
 	if (!dumper->fshead) {
-		bb_dump_add(dumper, add_first);
-		bb_dump_add(dumper, "\"%07_ax\"8/2 \" %04x\"\"\n\"");
+		add_format(dumper, "8/2 \" %04x");
 	}
 
 	argv += optind;