summaryrefslogtreecommitdiff
path: root/cdbget.c
blob: b69593039d64528465e7c442fb45f9710d299b49 (plain)
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;
}