Licensing Information

Open Source Used In Cisco FXOS 1.1(3) 863
tdb_unlock(tdb, -1);
return 0;
}
/* initialise a new database with a specified hash size */
static int tdb_new_database(TDB_CONTEXT *tdb, int hash_size)
{
struct tdb_header header;
tdb_off offset;
int i, size = 0;
tdb_off buf[16];
/* create the header */
memset(&header, 0, sizeof(header));
memcpy(header.magic_food, TDB_MAGIC_FOOD, strlen(TDB_MAGIC_FOOD)+1);
header.version = TDB_VERSION;
header.hash_size = hash_size;
lseek(tdb->fd, 0, SEEK_SET);
ftruncate(tdb->fd, 0);
if (tdb->fd != -1 && write(tdb->fd, &header, sizeof(header)) !=
sizeof(header)) {
tdb->ecode = TDB_ERR_IO;
return -1;
} else size += sizeof(header);
/* the freelist and hash pointers */
offset = 0;
memset(buf, 0, sizeof(buf));
for (i=0;(hash_size+1)-i >= 16; i += 16) {
if (tdb->fd != -1 && write(tdb->fd, buf, sizeof(buf)) !=
sizeof(buf)) {
tdb->ecode = TDB_ERR_IO;
return -1;
} else size += sizeof(buf);
}
for (;i<hash_size+1; i++) {
if (tdb->fd != -1 && write(tdb->fd, buf, sizeof(tdb_off)) !=
sizeof(tdb_off)) {
tdb->ecode = TDB_ERR_IO;
return -1;
} else size += sizeof(tdb_off);
}
if (tdb->fd == -1) {
tdb->map_ptr = calloc(size, 1);