diff --git a/src/tools/util.c b/src/tools/util.c new file mode 100644 index 00000000..98d29217 --- /dev/null +++ b/src/tools/util.c @@ -0,0 +1,56 @@ + +#include +#include +#include + +#include "util.h" + +void print_binary(FILE *f, const u8 *buf, int count) +{ + int i; + + for (i = 0; i < count; i++) { + unsigned char c = buf[i]; + const char *format; + if (!isalnum(c) && !ispunct(c) && !isspace(c)) + format = "\\x%02X"; + else + format = "%c"; + fprintf(f, format, c); + } + (void) fflush(f); +} + +void hex_dump(FILE *f, const u8 *in, int len) +{ + int i; + + for (i = 0; i < len; i++) + fprintf(f, "%02X ", in[i]); +} + +void hex_dump_asc(FILE *f, const u8 *in, size_t count) +{ + int lines = 0; + + while (count) { + char ascbuf[17]; + int i; + + for (i = 0; i < count && i < 16; i++) { + fprintf(f, "%02X ", *in); + if (isprint(*in)) + ascbuf[i] = *in; + else + ascbuf[i] = '.'; + in++; + } + count -= i; + ascbuf[i] = 0; + for (; i < 16 && lines; i++) + fprintf(f, " "); + fprintf(f, "%s\n", ascbuf); + lines++; + } +} + diff --git a/src/tools/util.h b/src/tools/util.h new file mode 100644 index 00000000..04ee7ffc --- /dev/null +++ b/src/tools/util.h @@ -0,0 +1,13 @@ + + +#ifndef UTIL_H +#define UTIL_H + +#include +#include + +void print_binary(FILE *f, const u8 *buf, int count); +void hex_dump(FILE *f, const u8 *in, int len); +void hex_dump_asc(FILE *f, const u8 *in, size_t count); + +#endif