summaryrefslogtreecommitdiff
path: root/cdbget.c
diff options
context:
space:
mode:
Diffstat (limited to 'cdbget.c')
-rw-r--r--cdbget.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/cdbget.c b/cdbget.c
new file mode 100644
index 0000000..b695930
--- /dev/null
+++ b/cdbget.c
@@ -0,0 +1,36 @@
+#include <string.h>
+#include <skalibs/allreadwrite.h>
+#include <skalibs/cdb.h>
+#include <skalibs/strerr.h>
+#include <skalibs/uint32.h>
+
+int
+main(int argc, char *argv[])
+{
+ PROG = "cdbget";
+ if (argc < 2 || argc > 3)
+ strerr_dieusage(100, "cdbget KEY [SKIP]");
+
+ char *key = argv[1];
+ uint32_t keylen = strlen(key);
+ uint32_t skip = 0;
+ if (argc == 3) {
+ if (!uint320_scan(argv[2], &skip))
+ strerr_dief(111, "invalid integer \"", argv[2], "\"");
+ }
+
+ cdb c = CDB_ZERO;
+ cdb_init_fromfd(&c, 0);
+
+ cdb_find_state findstate;
+ cdb_findstart(&findstate);
+ cdb_data data;
+ for (skip++; skip > 0; skip--) {
+ if (cdb_findnext(&c, &data, key, keylen, &findstate) == 0)
+ return 1;
+ }
+ if (allwrite(1, data.s, data.len) != data.len)
+ strerr_diefusys(111, "write cdb data to stdout");
+ cdb_free(&c);
+ return 0;
+}