GCC Code Coverage Report


Directory: ./
File: firmware/util/hexdump.cpp
Date: 2025-12-09 17:43:05
Warnings: 1 unchecked decisions!
Coverage Exec Excl Total
Lines: 0.0% 0 0 26
Functions: 0.0% 0 0 1
Branches: 0.0% 0 0 23
Decisions: 0.0% 0 - 20

Line Branch Decision Exec Source
1 #include <ctype.h>
2 #include <stdio.h>
3
4 #include "efiprintf.h"
5
6 #include "hexdump.h"
7
8 #ifndef HEXDUMP_COLS
9 #define HEXDUMP_COLS 16
10 #endif
11
12 void hexdump(const void *mem, size_t len, unsigned int prefix, bool printChar) {
13 char buffer[128];
14 size_t offset = 0;
15
16 for (unsigned i = 0; i < len + ((len % HEXDUMP_COLS) ? (HEXDUMP_COLS - len % HEXDUMP_COLS) : 0); i++) {
17 /* print offset */
18 if (i % HEXDUMP_COLS == 0) {
19 offset += sprintf(buffer + offset, "%08x: ", prefix + i);
20 } else if ((i + HEXDUMP_COLS / 2) % HEXDUMP_COLS == 0) {
21 offset += sprintf(buffer + offset, " ");
22 }
23
24 /* print hex data */
25 if (i < len) {
26 offset += sprintf(buffer + offset, "%02x ", 0xFF & ((unsigned char *)mem)[i]);
27 } else if (printChar) {
28 /* end of block, just aligning for ASCII dump */
29 offset += sprintf(buffer + offset, " ");
30 }
31
32 if (i % HEXDUMP_COLS == (HEXDUMP_COLS - 1)) {
33 if (printChar) {
34 /* print ASCII dump */
35 offset += sprintf(buffer + offset, "|");
36 for (unsigned j = i - (HEXDUMP_COLS - 1); j <= i; j++)
37 {
38 if (j >= len) {
39 /* end of block, not really printing */
40 offset += sprintf(buffer + offset, " ");
41 } else if (isprint(((unsigned char *)mem)[j])) {
42 /* printable char */
43 offset += sprintf(buffer + offset, "%c", 0xFF & ((char *)mem)[j]);
44 } else {
45 /* other char */
46 offset += sprintf(buffer + offset, ".");
47 }
48 }
49 offset += sprintf(buffer + offset, "|");
50 }
51
52 buffer[offset] = '\0';
53 efiPrintf("%s", buffer);
54 offset = 0;
55 }
56 }
57 }
58