From 5d37128db155d0688d7e8391a9eb5fe1d32a844f Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sun, 1 Mar 2020 10:34:15 -0800 Subject: git__hexdump: better mimic `hexdump -C` --- src/util.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/util.c b/src/util.c index 859e0a82b..745f840c0 100644 --- a/src/util.c +++ b/src/util.c @@ -424,35 +424,48 @@ void git__hexdump(const char *buffer, size_t len) last_line = (len % LINE_WIDTH); for (i = 0; i < line_count; ++i) { + printf("%08" PRIxZ " ", (i * LINE_WIDTH)); + line = buffer + (i * LINE_WIDTH); - for (j = 0; j < LINE_WIDTH; ++j, ++line) - printf("%02X ", (unsigned char)*line & 0xFF); + for (j = 0; j < LINE_WIDTH; ++j, ++line) { + printf("%02x ", (unsigned char)*line & 0xFF); + + if (j == (LINE_WIDTH / 2)) + printf(" "); + } - printf("| "); + printf(" |"); line = buffer + (i * LINE_WIDTH); for (j = 0; j < LINE_WIDTH; ++j, ++line) printf("%c", (*line >= 32 && *line <= 126) ? *line : '.'); - printf("\n"); + printf("|\n"); } if (last_line > 0) { + printf("%08" PRIxZ " ", (line_count * LINE_WIDTH)); line = buffer + (line_count * LINE_WIDTH); - for (j = 0; j < last_line; ++j, ++line) - printf("%02X ", (unsigned char)*line & 0xFF); + for (j = 0; j < last_line; ++j, ++line) { + printf("%02x ", (unsigned char)*line & 0xFF); + + if (j == (LINE_WIDTH / 2)) + printf(" "); + } + if (j < (LINE_WIDTH / 2)) + printf(" "); for (j = 0; j < (LINE_WIDTH - last_line); ++j) - printf(" "); + printf(" "); - printf("| "); + printf(" |"); line = buffer + (line_count * LINE_WIDTH); for (j = 0; j < last_line; ++j, ++line) printf("%c", (*line >= 32 && *line <= 126) ? *line : '.'); - printf("\n"); + printf("|\n"); } printf("\n"); -- cgit v1.2.1