Licensing Information
Open Source Used In Cisco FXOS 1.1(4) 976
if (tdb.fd != -1) {
fstat(tdb.fd, &st);
/* map the database and fill in the return structure */
tdb.name = (char *)strdup(name);
tdb.map_size = st.st_size;
}
tdb.locked = (int *)calloc(tdb.header.hash_size+1,
sizeof(tdb.locked[0]));
if (!tdb.locked) {
goto fail;
}
#if HAVE_MMAP
if (tdb.fd != -1) {
tdb.map_ptr = (void *)mmap(NULL, st.st_size,
tdb.read_only? PROT_READ : PROT_READ|PROT_WRITE,
MAP_SHARED | MAP_FILE, tdb.fd, 0);
}
#endif
ret = (TDB_CONTEXT *)malloc(sizeof(tdb));
if (!ret) goto fail;
*ret = tdb;
#if TDB_DEBUG
printf("mapped database of hash_size %u map_size=%u\n",
hash_size, tdb.map_size);
#endif
tdb_brlock(&tdb, GLOBAL_LOCK, LOCK_CLEAR, F_WRLCK, F_SETLKW);
return ret;
fail:
if (tdb.name) free(tdb.name);
if (tdb.fd != -1) close(tdb.fd);
if (tdb.map_ptr) munmap(tdb.map_ptr, tdb.map_size);
return NULL;
}
/* close a database */
int tdb_close(TDB_CONTEXT *tdb)
{
if (!tdb) return -1;