diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/hexdump.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/src/lib/hexdump.c b/src/lib/hexdump.c index 7907a381b5..2861d6321e 100644 --- a/src/lib/hexdump.c +++ b/src/lib/hexdump.c @@ -23,39 +23,44 @@ static int isprint(int c) void hexdump(const void *memory, size_t length) { int i; - uint8_t *m; + uint8_t *line; int all_zero = 0; - - m = (uint8_t *) memory; + int all_one = 0; + size_t num_bytes; for (i = 0; i < length; i += 16) { int j; - int left = MIN(length - i, 16); + num_bytes = MIN(length - i, 16); + line = ((uint8_t *)memory) + i; + + all_zero++; + all_one++; + for (j = 0; j < num_bytes; j++) { + if (line[j] != 0) { + all_zero = 0; + break; + } + } - if (left < 16) { - all_zero = 0; - } else { - all_zero++; - for (j = 0; j < 16; j++) { - if (m[i + j] != 0) { - all_zero = 0; - break; - } + for (j = 0; j < num_bytes; j++) { + if (line[j] != 0xff) { + all_one = 0; + break; } } - if (all_zero < 2) { + if ((all_zero < 2) && (all_one < 2)) { printk(BIOS_DEBUG, "%p:", memory + i); - for (j = 0; j < left; j++) - printk(BIOS_DEBUG, " %02x", m[i + j]); - for (j = left; j < 16; j++) + for (j = 0; j < num_bytes; j++) + printk(BIOS_DEBUG, " %02x", line[j]); + for (; j < 16; j++) printk(BIOS_DEBUG, " "); printk(BIOS_DEBUG, " "); - for (j = 0; j < left; j++) + for (j = 0; j < num_bytes; j++) printk(BIOS_DEBUG, "%c", - isprint(m[i + j]) ? m[i + j] : '.'); + isprint(line[j]) ? line[j] : '.'); printk(BIOS_DEBUG, "\n"); - } else if (all_zero == 2) { + } else if ((all_zero == 2) || (all_one == 2)) { printk(BIOS_DEBUG, "...\n"); } } |