CDBR(3)

CDBR(3) | Library Functions Manual | CDBR(3)

# NAME

cdbr cdbr_open, cdbr_open_mem, cdbr_entries, cdbr_get, cdbr_find, cdbr_close, cdbr_write — constant database access methods

# SYNOPSIS

struct cdbr *
cdbr_open(const char *path, int flags);

struct cdbr *
cdbr_open_mem(void *base, size_t size, void (*unmap)(void *, void *, size_t), void *cookie);

uint32_t
cdbr_entries(struct cdbr *cdbr);

int
cdbr_get(struct cdbr *cdbr, uint32_t index, const void **data, size_t *datalen);

int
cdbr_find(struct cdbr *cdbr, const void *key, size_t keylen, const void **data, size_t *datalen);

void
cdbr_close(struct cdbr *cdbr);

# DESCRIPTION

The cdbr library provides a space efficient (key,value) database based on perfect hashing.

A cdb database is opened for reading by calling cdbr_open(). The only supported value for flags is CDBR_DEFAULT. The function returns a handle to pass to the other functions. The database is closed by invoking cdbr_close(). All resources associated with the handle are freed and the memory returned by cdbr_get() and cdbr_find() is invalidated. cdbr_open_mem() works like cdbr_open(), but takes a memory reference to the content of the database file. If unmap is not NULL, it is called by cdbr_close() with cookie, base and size as arguments. It is not called by cdbr_open_mem() on error.

The number of records in the database can be obtained by calling cdbr_entries(). Records can be obtained by record number using cdbr_get() or by key using cdbr_find(). Both functions return 0 on success and update data and datalen accordingly. The location *data remains valid until cdbr_close() is called. It is the responsibility of the caller of cdbr_find() to ensure that the key matches the returned data. The function returns the only possible match, but the database doesn't store the keys to minimize overhead.

# SEE ALSO

nbperf(1), cdbw(3), db(3), cdb(5)

# HISTORY

Support for the cdb format first appeared in NetBSD 6.0.

# AUTHORS

The cdbr and cdbw functions have been written by Joerg Sonnenberger <joerg@NetBSD.org>.

December 5, 2013 | NetBSD 7.1