[coreboot-gerrit] Patch set updated for coreboot: lib/hexdump: Refactor to skip lines with all ones as well

Alexandru Gagniuc (mr.nuke.me@gmail.com) gerrit at coreboot.org
Wed Jan 20 23:52:29 CET 2016


Alexandru Gagniuc (mr.nuke.me at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/12872

-gerrit

commit b073c55945818ebe1b922675151636a7403be904
Author: Alexandru Gagniuc <alexandrux.gagniuc at intel.com>
Date:   Wed Oct 14 09:56:28 2015 -0700

    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 at intel.com>
---
 src/lib/hexdump.c | 45 +++++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/lib/hexdump.c b/src/lib/hexdump.c
index 7907a38..2861d63 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");
 		}
 	}



More information about the coreboot-gerrit mailing list