chiark / gitweb /
util: add hexdump() call to create pretty hexdumps of data
[elogind.git] / src / shared / util.c
index 8b8d2fbc5e5aaf066a7b91c20f3d231bc07e89de..7e17851fcd27bb15aa513df6166941810fb11b79 100644 (file)
@@ -6347,3 +6347,46 @@ char* mount_test_option(const char *haystack, const char *needle) {
 
         return hasmntopt(&me, needle);
 }
+
+void hexdump(FILE *f, const void *p, size_t s) {
+        const uint8_t *b = p;
+        unsigned n = 0;
+
+        assert(s == 0 || b);
+
+        while (s > 0) {
+                size_t i;
+
+                fprintf(f, "%04x  ", n);
+
+                for (i = 0; i < 16; i++) {
+
+                        if (i >= s)
+                                fputs("   ", f);
+                        else
+                                fprintf(f, "%02x ", b[i]);
+
+                        if (i == 7)
+                                fputc(' ', f);
+                }
+
+                fputc(' ', f);
+
+                for (i = 0; i < 16; i++) {
+
+                        if (i >= s)
+                                fputc(' ', f);
+                        else
+                                fputc(isprint(b[i]) ? (char) b[i] : '.', f);
+                }
+
+                fputc('\n', f);
+
+                if (s < 16)
+                        break;
+
+                n += 16;
+                b += 16;
+                s -= 16;
+        }
+}