1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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;
}
|