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

# NAME

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

# SYNOPSIS

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

struct cdbr *
`cdbr_open_mem`(void *base, size_t size, int flags, 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 1, 2018 | NetBSD 9.2