X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Fopen.c;h=96b5a5ea3f6a2b73b265e0f69ef7826aff27d207;hb=de432e8f857ce23bccde7c6ffa3e7e21456df18b;hp=e88c9e694c531b67bf4a6ff33d113a3b4078ad59;hpb=5802573130c841d10734e1b0dcdb0b13167f9c86;p=ccan diff --git a/ccan/tdb2/open.c b/ccan/tdb2/open.c index e88c9e69..96b5a5ea 100644 --- a/ccan/tdb2/open.c +++ b/ccan/tdb2/open.c @@ -532,6 +532,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)); @@ -550,17 +556,20 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, /* Clear any features we don't understand. */ if ((open_flags & O_ACCMODE) != O_RDONLY) { hdr.features_used &= TDB_FEATURE_MASK; - if (tdb_write_convert(tdb, offsetof(struct tdb_header, - features_used), - &hdr.features_used, - sizeof(hdr.features_used)) == -1) + ecode = tdb_write_convert(tdb, offsetof(struct tdb_header, + features_used), + &hdr.features_used, + sizeof(hdr.features_used)); + if (ecode != TDB_SUCCESS) goto fail; } 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);