blob: 54b18df448b48c8430243e1bcc25bc638f352a04 [file] [log] [blame]
The Android Open Source Project88b60792009-03-03 19:28:42 -08001#include <debug.h>
2#include <stdio.h>
3#include <ctype.h>
4
5#define NUM_COLS (32)
6
7int 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