limb 0.2.0

2024-01-09

cdbmaker_sa_start(3)
limb manual
cdbmaker_sa_start(3)

NAME

cdbmaker_sa_init, cdbmaker_sa_start, cdbmaker_sa_add, cdbmaker_sa_finish, cdbmaker_sa_data, cdbmaker_sa_dlen, cdbmaker_sa_free - create a cdb in memory

SYNOPSIS

#include <limb/cdbmake.h>
#define CDBMAKER_SA_ZERO

void cdbmaker_sa_init(cdbmaker_sa *mkr)
int cdbmaker_sa_start(cdbmaker_sa *mkr)
int cdbmaker_sa_add(cdbmaker_sa *mkr, const char *key, u32 klen, const char *data, u32 dlen)
int cdbmaker_sa_finish(cdbmaker_sa *mkr)
const char *cdbmaker_sa_data(cdbmaker_sa *mkr)
size_t cdbmaker_sa_dlen(cdbmaker_sa *mkr)
void cdbmaker_sa_free(cdbmaker_sa *mkr)

DESCRIPTION

Before using a cdbmaker_sa it should first be properly initialized. This can be done upon declaration using the CDBMAKER_SA_ZERO macro. If not, the cdbmaker_sa_init() function should then be called first.

The cdbmaker_sa_start(), cdbmaker_sa_add() and cdbmaker_sa_finish() functions are similar to cdbmake_start(3), cdbmake_add(3) and cdbmake_finish(3) respectively, only the resulting cdb will not be written to a file but instead be available in memory.

The cdbmaker_sa_start() prepares the opaque structure pointed to by mkr in order to begin creation of a new cdb. Said structure must have previously been initialized as mentioned before.

Note that, after a successful call to cdbmaker_sa_finish() it is possible to re-use the same cdbmaker_sa structure, to create another cdb, by calling cdbmaker_sa_start() again.

The cdbmaker_sa_add() function is to be called for each element to be added to the cdb, specifying the key pointed to by key of length klen bytes, and the data pointed to by data of length dlen bytes. The actual content of both key and data will be of course be copied into the cdb.

Elements will be added into the cdb in the order of the calls made to cdbmaker_sa_add().

Finally, the cdbmaker_sa_finish() function must be called after all elements have been added via cdbmaker_sa_add(), in order for the cdb to be actually created.

Then, the cdbmaker_sa_data() function will return a pointer to the in-memory cdb data, i.e. the content of a cdb file, whose length will be returned by the cdbmaker_sa_dlen() function.

The returned pointer can be used until the cdbmaker_sa_free() function is called, which will free memory associated with the opaque structure pointed to by mkr, starting with the generated cdb data. It is not needed to use it before calling cdbmaker_sa_start() again in order to generate a new cdb, thusly re-using the already allocated memory area.

RETURN VALUE

The cdbmaker_sa_start(), cdbmaker_sa_add() and cdbmaker_sa_finish() functions return 1 on success. Otherwise, they return 0 and set errno to indicate the error.

The cdbmaker_sa_data() function returns a pointer to the generated cdb data.

The cdbmaker_sa_dlen() function returns the length (in bytes) of the generated cdb data, of which a pointer to can be obtained via cdbmaker_sa_data().

It is invalid to call either cdbmaker_sa_data() or cdbmaker_sa_dlen() before a successful call to cdbmaker_sa_finish() was made.

ERRORS

The cdbmaker_sa_start(), cdbmaker_sa_add() and cdbmaker_sa_finish() may fail if :

ENOMEM

Not enough memory to create to cdb.

The cdbmaker_sa_start() function may also fail if :

EINVAL

The cdbmaker_sa structure is not in a valid/properly initialized state.

The cdbmaker_sa_add() function may also fail if :

EOVERFLOW

The resulting cdb would overflow, i.e. go over its 4 GiB limit.

limb 0.1.0
2023-07-24
cdbmaker_sa_start(3)