diff options
Diffstat (limited to 'cdbget.c')
| -rw-r--r-- | cdbget.c | 36 |
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; +} |
