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 {
9 int num_nonprintable = 0;
10 int i, last;
11 char *pchr = (char *)b;
12 fputc('\n', s);
13 for (i = last = 0; i < len; i++) {
14 if (!elsize) {
15 if (i && !(i % 4)) fprintf(s, " ");
16 if (i && !(i % 8)) fprintf(s, " ");
17 }
18 else {
19 if (i && !(i % elsize)) fprintf(s, " ");
20 }
21
22 if (i && !(i % NUM_COLS)) {
23 while (last < i) {
24 if (isprint(pchr[last]))
25 fputc(pchr[last], s);
26 else {
27 fputc('.', s);
28 num_nonprintable++;
29 }
30 last++;
31 }
32 fprintf(s, " (%d)\n", i);
33 }
34 fprintf(s, "%02x", (unsigned char)pchr[i]);
35 }
36 if (i && (i % NUM_COLS)) fputs("\n", s);
37 return num_nonprintable;
38 }
39
40