Licensing Information

Open Source Used In Cisco FXOS 1.1(3) 860
length = ((tdb->map_size + length + TDB_PAGE_SIZE) & ~(TDB_PAGE_SIZE - 1)) - tdb->map_size;
/* expand the file itself */
if (tdb->fd != -1) {
lseek(tdb->fd, tdb->map_size + length - 1, SEEK_SET);
if (write(tdb->fd, &b, 1) != 1) goto fail;
}
/* form a new freelist record */
offset = FREELIST_TOP;
rec.rec_len = length - sizeof(rec);
rec.magic = TDB_FREE_MAGIC;
if (ofs_read(tdb, offset, &rec.next) == -1) {
goto fail;
}
#if HAVE_MMAP
if (tdb->fd != -1 && tdb->map_ptr) {
munmap(tdb->map_ptr, tdb->map_size);
tdb->map_ptr = NULL;
}
#endif
tdb->map_size += length;
if (tdb->fd == -1) {
tdb->map_ptr = realloc(tdb->map_ptr, tdb->map_size);
}
/* write it out */
if (rec_write(tdb, tdb->map_size - length, &rec) == -1) {
goto fail;
}
/* link it into the free list */
ptr = tdb->map_size - length;
if (ofs_write(tdb, offset, &ptr) == -1) goto fail;
#if HAVE_MMAP
if (tdb->fd != -1) {
tdb->map_ptr = (void *)mmap(NULL, tdb->map_size,
PROT_READ|PROT_WRITE,
MAP_SHARED | MAP_FILE, tdb->fd, 0);
}
#endif
tdb_unlock(tdb, -1);
return 0;