diff options
| author | Sam Nystrom <sam@samnystrom.dev> | 2024-01-15 13:35:27 -0500 |
|---|---|---|
| committer | Sam Nystrom <sam@samnystrom.dev> | 2024-01-15 13:35:27 -0500 |
| commit | 2bdd00aa69b901e5230c9b8c24727011626ebeaa (patch) | |
| tree | 27967a3ccc64ac477cb0336f4e61282e8ab832ff /cdbget.c | |
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; +} |
