aboutsummaryrefslogtreecommitdiff
path: root/src/lib/hexdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/hexdump.c')
-rw-r--r--src/lib/hexdump.c45
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");
}
}