]> git.saurik.com Git - apple/hfs.git/blobdiff - CopyHFSMeta/dump.c
hfs-183.1.tar.gz
[apple/hfs.git] / CopyHFSMeta / dump.c
diff --git a/CopyHFSMeta/dump.c b/CopyHFSMeta/dump.c
new file mode 100644 (file)
index 0000000..67067e4
--- /dev/null
@@ -0,0 +1,74 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#define MIN(a, b) \
+       ({ __typeof(a) _a = (a); __typeof(b) _b = (b);  \
+               (_a < _b) ? _a : _b; })
+
+enum { WIDTH = 16, };
+
+/*
+ * Debug functions only.
+ */
+void
+DumpData(const void *data, size_t len)
+{
+       unsigned char *base = (unsigned char*)data;
+       unsigned char *end = base + len;
+       unsigned char *cp = base;
+       int allzeroes = 0;
+
+       while (cp < end) {
+               unsigned char *tend = MIN(end, cp + WIDTH);
+               unsigned char *tmp;
+               int i;
+               size_t gap = (cp + WIDTH) - tend;
+
+               if (gap != 0 || tend == end)
+                       allzeroes = 0;
+               if (allzeroes) {
+                       for (tmp = cp; tmp < tend; tmp++) {
+                               if (*tmp) {
+                                       allzeroes = 0;
+                                       break;
+                               }
+                       }
+                       if (allzeroes == 1) {
+                               printf(". . .\n");
+                               allzeroes = 2;
+                       }
+                       if (allzeroes) {
+                               cp += WIDTH;
+                               continue;
+                       }
+               }
+               allzeroes = 1;
+
+               printf("%04x:  ", (int)(cp - base));
+               for (i = 0, tmp = cp; tmp < tend; tmp++) {
+                       printf("%02x", *tmp);
+                       if (++i % 2 == 0)
+                               printf(" ");
+                       if (*tmp)
+                               allzeroes = 0;
+               }
+               for (i = gap; i >= 0; i--) {
+                       printf("  ");
+                       if (i % 2 == 1)
+                               printf(" ");
+               }
+               printf("    |");
+               for (tmp = cp; tmp < tend; tmp++) {
+                       printf("%c", isalnum(*tmp) ? *tmp : '.');
+               }
+               for (i = 0; i < gap; i++) {
+                       printf(" ");
+               }
+               printf("|\n");
+               cp += WIDTH;
+       }
+
+       return;
+
+}