summaryrefslogtreecommitdiff
path: root/cdbdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'cdbdump.c')
-rw-r--r--cdbdump.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/cdbdump.c b/cdbdump.c
new file mode 100644
index 0000000..7e77ef7
--- /dev/null
+++ b/cdbdump.c
@@ -0,0 +1,42 @@
+#include <skalibs/buffer.h>
+#include <skalibs/cdb.h>
+#include <skalibs/strerr.h>
+#include <skalibs/uint32.h>
+
+int
+main(int argc, char *argv[])
+{
+ PROG = "cdbdump";
+ if (argc != 1)
+ strerr_dieusage(100, "cdbdump < CDB");
+
+ cdb c = CDB_ZERO;
+ cdb_init_fromfd(&c, 0);
+ cdb_data key, data;
+ uint32_t pos = CDB_TRAVERSE_INIT();
+ for (;;) {
+ int r = cdb_traverse_next(&c, &key, &data, &pos);
+ if (!r) break;
+ if (r < 0)
+ strerr_diefusys(111, "read cdb");
+
+ char uintbuf[sizeof("4294967295")];
+
+ buffer_put(buffer_1, "+", 1);
+ uintbuf[uint32_fmt(uintbuf, key.len)] = 0;
+ buffer_puts(buffer_1, uintbuf);
+ buffer_put(buffer_1, ",", 1);
+ uintbuf[uint32_fmt(uintbuf, data.len)] = 0;
+ buffer_puts(buffer_1, uintbuf);
+ buffer_put(buffer_1, ":", 1);
+
+ buffer_put(buffer_1, key.s, key.len);
+ buffer_put(buffer_1, "->", 2);
+ buffer_put(buffer_1, data.s, data.len);
+ buffer_put(buffer_1, "\n", 1);
+
+ buffer_flush(buffer_1);
+ }
+ cdb_free(&c);
+ return 0;
+}