#include <debug.h> | |
#include <stdio.h> | |
#include <ctype.h> | |
#define NUM_COLS (32) | |
int dump_hex_buffer(FILE *s, void *b, size_t len, size_t elsize) | |
{ | |
int num_nonprintable = 0; | |
int i, last; | |
char *pchr = (char *)b; | |
fputc('\n', s); | |
for (i = last = 0; i < len; i++) { | |
if (!elsize) { | |
if (i && !(i % 4)) fprintf(s, " "); | |
if (i && !(i % 8)) fprintf(s, " "); | |
} | |
else { | |
if (i && !(i % elsize)) fprintf(s, " "); | |
} | |
if (i && !(i % NUM_COLS)) { | |
while (last < i) { | |
if (isprint(pchr[last])) | |
fputc(pchr[last], s); | |
else { | |
fputc('.', s); | |
num_nonprintable++; | |
} | |
last++; | |
} | |
fprintf(s, " (%d)\n", i); | |
} | |
fprintf(s, "%02x", (unsigned char)pchr[i]); | |
} | |
if (i && (i % NUM_COLS)) fputs("\n", s); | |
return num_nonprintable; | |
} | |