---
name: "tdb_traverse"
section: "3"
platform: "linux"
package: "libtdb-dev"
version: "2:1.4.13+samba4.22.11+dfsg-0+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/tdb_traverse"
---

# tdb\_traverse(3)

visit every element in a tdb database

## NAME

tdb\_traverse - visit every element in a tdb database

## SYNOPSIS

```
#include <tdb.h>

int tdb_traverse(TDB_CONTEXT *tdb,
        int (*fn)(TDB_CONTEXT *,TDB_DATA,TDB_DATA,void *),
        void *state);

```

## DESCRIPTION

*tdb\_traverse is the only sure way to visit all the items within a* given database, *tdb* Because this function has intimate knowledge of the internals of the database, it is able to cope with writers touching the database at the same time it is trying to traverse it.

If *fn* is supplied it will be called with the *state parameter* for each element in the database, as the forth argument. The First argument is the database *tdb* the second is the key and the third is the data. If this function call returns anything but 0, the traversal will stop. Unlike in tdb\_fetch() the programmer is not required to free either the pointer from either the key or data parameters that are passed into the function. The *fn* function should have the prototype:

```
int (*tdb_traverse_func)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *);
```

Calling tdb\_traverse with a NULL *fn* parameter is the appropriate way to count the number of elements in the database.

## RETURN VALUE

The return value is the number of elements traversed or -1 if there was an error.

## AUTHORS

Software: Andrew Tridgell \<tridge@linuxcare.com\> and Luke Kenneth Casson Leighton Man page: Ben Woodard \<ben@valinux.com\>

## SEE ALSO

[**gdbm**(3)](/gdbm/3.md), **[tdb(3)](/tdb/3.md)**
