diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2020-03-01 10:34:15 -0800 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2020-04-01 21:59:37 +0100 |
commit | 5d37128db155d0688d7e8391a9eb5fe1d32a844f (patch) | |
tree | bad66b258970540312e3a4f1ad15dc39fdedf659 | |
parent | 1c7fb21246629d6d5c7dd5d6eaf646339c57ab1c (diff) | |
download | libgit2-ethomson/hexdump.tar.gz |
git__hexdump: better mimic `hexdump -C`ethomson/hexdump
-rw-r--r-- | src/util.c | 31 |
1 files 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"); |