X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Fopen.c;h=83a83e0ba578b75e873c7900a140f08b7cf00b22;hb=6b7c3c840eafbec211b9f58751c5ff754302a68e;hp=daa83a334c44a39db4dad37c77e0090fee858769;hpb=51f592dfcda4d58d6b9d8134b6e1aff791dc40f2;p=ccan diff --git a/ccan/tdb2/open.c b/ccan/tdb2/open.c index daa83a33..83a83e0b 100644 --- a/ccan/tdb2/open.c +++ b/ccan/tdb2/open.c @@ -369,6 +369,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, tdb->log_fn = NULL; tdb->transaction = NULL; tdb->access = NULL; + tdb->open_flags = open_flags; tdb->last_error = TDB_SUCCESS; tdb->file = NULL; tdb->lock_fn = tdb_fcntl_lock; @@ -416,11 +417,9 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, if ((open_flags & O_ACCMODE) == O_RDONLY) { tdb->read_only = true; - tdb->mmap_flags = PROT_READ; openlock = F_RDLCK; } else { tdb->read_only = false; - tdb->mmap_flags = PROT_READ | PROT_WRITE; openlock = F_WRLCK; } @@ -532,6 +531,12 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, name, (long long)hdr.version); goto fail; } + } else if (tdb->flags & TDB_CONVERT) { + ecode = tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR, + "tdb_open:" + " %s does not need TDB_CONVERT", + name); + goto fail; } tdb_convert(tdb, &hdr, sizeof(hdr)); @@ -561,7 +566,9 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, tdb_unlock_open(tdb, openlock); /* This make sure we have current map_size and mmap. */ - tdb->methods->oob(tdb, tdb->file->map_size + 1, true); + ecode = tdb->methods->oob(tdb, tdb->file->map_size + 1, true); + if (unlikely(ecode != TDB_SUCCESS)) + goto fail; /* Now it's fully formed, recover if necessary. */ berr = tdb_needs_recovery(tdb);