summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'util.c')
-rw-r--r--util.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/util.c b/util.c
new file mode 100644
index 0000000..be7083c
--- /dev/null
+++ b/util.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <ctype.h>
+#include "util.h"
+
+
+void xxd(const void *buf_, size_t length) {
+ unsigned char *buf = (unsigned char*)buf_;
+
+ for (size_t cursor = 0; cursor < length;) {
+ printf("%08zx:", cursor);
+
+ for (int i = 0; i < 16; i++) {
+ if (i % 2 == 0) printf(" ");
+ if (i % 8 == 0) printf(" ");
+ if (cursor + i < length) printf("%02x", (unsigned)buf[cursor + i]);
+ else printf(" ");
+ }
+
+ printf(" |");
+
+ for (int i = 0; i < 16 && cursor + i < length; i++) {
+ if (isprint(buf[cursor + i])) printf("%c", buf[cursor + i]);
+ else printf(".");
+ }
+
+ printf("|\n");
+
+ cursor += 16;
+ }
+}