tdb->file = malloc(sizeof(*tdb->file));
if (!tdb->file)
return tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
- "tdb_open: could alloc tdb_file structure");
+ "tdb_open: cannot alloc tdb_file structure");
tdb->file->num_lockrecs = 0;
tdb->file->lockrecs = NULL;
tdb->file->allrecord_lock.count = 0;
tdb_bool_err berr;
enum TDB_ERROR ecode;
- tdb = malloc(sizeof(*tdb));
+ tdb = malloc(sizeof(*tdb) + (name ? strlen(name) + 1 : 0));
if (!tdb) {
/* Can't log this */
errno = ENOMEM;
return NULL;
}
- tdb->name = NULL;
+ /* Set name immediately for logging functions. */
+ if (name) {
+ tdb->name = strcpy((char *)(tdb + 1), name);
+ } else {
+ tdb->name = NULL;
+ }
tdb->direct_access = 0;
tdb->flags = tdb_flags;
tdb->log_fn = NULL;
#ifdef TDB_TRACE
close(tdb->tracefd);
#endif
- free(cast_const(char *, tdb->name));
if (tdb->file) {
tdb_lock_cleanup(tdb);
if (--tdb->file->refcnt == 0) {
else
tdb_munmap(tdb->file);
}
- free(cast_const(char *, tdb->name));
if (tdb->file) {
struct tdb_file **i;