1 #include <debug.h>
2 #include <stdio.h>
3 #include <ctype.h>
4
5 #define NUM_COLS (32)
6
dump_hex_buffer(FILE * s,void * b,size_t len,size_t elsize)7 int dump_hex_buffer(FILE *s, void *b, size_t len, size_t elsize) {
8 int num_nonprintable = 0;
9 int i, last;
10 char *pchr = (char *)b;
11 fputc('\n', s);
12 for (i = last = 0; i < len; i++) {
13 if (!elsize) {
14 if (i && !(i % 4)) fprintf(s, " ");
15 if (i && !(i % 8)) fprintf(s, " ");
16 } else {
17 if (i && !(i % elsize)) fprintf(s, " ");
18 }
19
20 if (i && !(i % NUM_COLS)) {
21 while (last < i) {
22 if (isprint(pchr[last]))
23 fputc(pchr[last], s);
24 else {
25 fputc('.', s);
26 num_nonprintable++;
27 }
28 last++;
29 }
30 fprintf(s, " (%d)\n", i);
31 }
32 fprintf(s, "%02x", (unsigned char)pchr[i]);
33 }
34 if (i && (i % NUM_COLS)) fputs("\n", s);
35 return num_nonprintable;
36 }
37
38