lib/hexdump: Refactor to skip lines with all ones as well
We already do this for lines with all zeroes, so it makes sense to treat all ones the same, for symmetry. Change-Id: I4b637b07a49e0c649331aa200995b474dd9a2682 Signed-off-by: Alexandru Gagniuc <alexandrux.gagniuc@intel.com> Reviewed-on: https://review.coreboot.org/12872 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
95f33f4e7e
commit
dc6c43182e
|
@ -23,39 +23,44 @@ static int isprint(int c)
|
||||||
void hexdump(const void *memory, size_t length)
|
void hexdump(const void *memory, size_t length)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint8_t *m;
|
uint8_t *line;
|
||||||
int all_zero = 0;
|
int all_zero = 0;
|
||||||
|
int all_one = 0;
|
||||||
m = (uint8_t *) memory;
|
size_t num_bytes;
|
||||||
|
|
||||||
for (i = 0; i < length; i += 16) {
|
for (i = 0; i < length; i += 16) {
|
||||||
int j;
|
int j;
|
||||||
int left = MIN(length - i, 16);
|
num_bytes = MIN(length - i, 16);
|
||||||
|
line = ((uint8_t *)memory) + i;
|
||||||
|
|
||||||
if (left < 16) {
|
|
||||||
all_zero = 0;
|
|
||||||
} else {
|
|
||||||
all_zero++;
|
all_zero++;
|
||||||
for (j = 0; j < 16; j++) {
|
all_one++;
|
||||||
if (m[i + j] != 0) {
|
for (j = 0; j < num_bytes; j++) {
|
||||||
|
if (line[j] != 0) {
|
||||||
all_zero = 0;
|
all_zero = 0;
|
||||||
break;
|
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);
|
printk(BIOS_DEBUG, "%p:", memory + i);
|
||||||
for (j = 0; j < left; j++)
|
for (j = 0; j < num_bytes; j++)
|
||||||
printk(BIOS_DEBUG, " %02x", m[i + j]);
|
printk(BIOS_DEBUG, " %02x", line[j]);
|
||||||
for (j = left; j < 16; j++)
|
for (; j < 16; j++)
|
||||||
printk(BIOS_DEBUG, " ");
|
printk(BIOS_DEBUG, " ");
|
||||||
printk(BIOS_DEBUG, " ");
|
printk(BIOS_DEBUG, " ");
|
||||||
for (j = 0; j < left; j++)
|
for (j = 0; j < num_bytes; j++)
|
||||||
printk(BIOS_DEBUG, "%c",
|
printk(BIOS_DEBUG, "%c",
|
||||||
isprint(m[i + j]) ? m[i + j] : '.');
|
isprint(line[j]) ? line[j] : '.');
|
||||||
printk(BIOS_DEBUG, "\n");
|
printk(BIOS_DEBUG, "\n");
|
||||||
} else if (all_zero == 2) {
|
} else if ((all_zero == 2) || (all_one == 2)) {
|
||||||
printk(BIOS_DEBUG, "...\n");
|
printk(BIOS_DEBUG, "...\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue