eal: align hexdump output
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 2 Apr 2019 15:23:50 +0000 (08:23 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 3 Apr 2019 16:34:59 +0000 (18:34 +0200)
This fixes the issue where if the length of the output is not
a multiple of 16 the formatting was off.

Before:
00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@.......
00000010: C0 A8 01 37 |  |  |  |  |  |  |  |  |  |  |  |  | ...7

After:
00000000: 45 00 00 1C 12 34 2C E0 40 06 B8 2E C0 A8 01 12 | E....4,.@.......
00000010: C0 A8 01 37                                     | ...7

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
lib/librte_eal/common/eal_common_hexdump.c

index 6af818b..2d2179d 100644 (file)
@@ -23,9 +23,16 @@ rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len)
        while (ofs < len) {
                /* format the line in the buffer */
                out = snprintf(line, LINE_LEN, "%08X:", ofs);
-               for (i = 0; i < 16 && ofs + i < len; i++)
-                       out += snprintf(line + out, LINE_LEN - out,
+               for (i = 0; i < 16; i++) {
+                       if (ofs + i < len)
+                               snprintf(line + out, LINE_LEN - out,
                                         " %02X", (data[ofs + i] & 0xff));
+                       else
+                               strcpy(line + out, "   ");
+                       out += 3;
+               }
+
+
                for (; i <= 16; i++)
                        out += snprintf(line + out, LINE_LEN - out, " | ");