summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Gagniuc <alexandrux.gagniuc@intel.com>2015-10-14 09:56:28 -0700
committerPatrick Georgi <pgeorgi@google.com>2016-01-22 14:10:28 +0100
commitdc6c43182eb0fd7049d06659119a6bd99c76962e (patch)
treedc93da6125834307498a4be27d229fd3161d369f
parent95f33f4e7eae57e28b9d92d82ccaceab4c5c8d27 (diff)
downloadcoreboot-dc6c43182eb0fd7049d06659119a6bd99c76962e.tar.xz
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>
-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");
}
}