X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb1_tdb.c;h=384654ed941a87910a3b1c00be07a570f4cae018;hb=98c754ffe65bc335f66161d6cc8705d4ea2710ec;hp=400c9866e88ed32f7c675e445d6f5061e4b6fdcb;hpb=bbeb528e74c0e234e1f724ac8d54be404cfc6f9a;p=ccan diff --git a/ccan/tdb2/tdb1_tdb.c b/ccan/tdb2/tdb1_tdb.c index 400c9866..384654ed 100644 --- a/ccan/tdb2/tdb1_tdb.c +++ b/ccan/tdb2/tdb1_tdb.c @@ -26,6 +26,7 @@ */ #include "tdb1_private.h" +#include TDB_DATA tdb1_null; @@ -601,6 +602,8 @@ int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag) uint32_t hash; int ret; + assert(tdb->flags & TDB_VERSION1); + if ((tdb->flags & TDB_RDONLY) || tdb->tdb1.traverse_read) { tdb->last_error = TDB_ERR_RDONLY; return -1; @@ -681,11 +684,6 @@ int tdb1_get_seqnum(struct tdb_context *tdb) return seqnum; } -int tdb1_hash_size(struct tdb_context *tdb) -{ - return tdb->tdb1.header.hash_size; -} - /* add a region of the file to the freelist. Length is the size of the region in bytes, @@ -836,6 +834,11 @@ int tdb1_repack(struct tdb_context *tdb) { struct tdb_context *tmp_db; struct traverse_state state; + union tdb_attribute hsize; + + hsize.base.attr = TDB_ATTRIBUTE_TDB1_HASHSIZE; + hsize.base.next = NULL; + hsize.tdb1_hashsize.hsize = tdb->tdb1.header.hash_size; if (tdb1_transaction_start(tdb) != 0) { tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR, @@ -843,7 +846,7 @@ int tdb1_repack(struct tdb_context *tdb) return -1; } - tmp_db = tdb1_open("tmpdb", tdb1_hash_size(tdb), TDB_INTERNAL, O_RDWR|O_CREAT, 0); + tmp_db = tdb_open("tmpdb", TDB_INTERNAL, O_RDWR|O_CREAT, 0, &hsize); if (tmp_db == NULL) { tdb->last_error = tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR, __location__ " Failed to create tmp_db"); @@ -858,7 +861,7 @@ int tdb1_repack(struct tdb_context *tdb) tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR, __location__ " Failed to traverse copying out"); tdb1_transaction_cancel(tdb); - tdb1_close(tmp_db); + tdb_close(tmp_db); return -1; } @@ -866,7 +869,7 @@ int tdb1_repack(struct tdb_context *tdb) tdb->last_error = tdb_logerr(tdb, state.error, TDB_LOG_ERROR, __location__ " Error during traversal"); tdb1_transaction_cancel(tdb); - tdb1_close(tmp_db); + tdb_close(tmp_db); return -1; } @@ -874,7 +877,7 @@ int tdb1_repack(struct tdb_context *tdb) tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR, __location__ " Failed to wipe database\n"); tdb1_transaction_cancel(tdb); - tdb1_close(tmp_db); + tdb_close(tmp_db); return -1; } @@ -885,7 +888,7 @@ int tdb1_repack(struct tdb_context *tdb) tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR, __location__ " Failed to traverse copying back"); tdb1_transaction_cancel(tdb); - tdb1_close(tmp_db); + tdb_close(tmp_db); return -1; } @@ -893,11 +896,11 @@ int tdb1_repack(struct tdb_context *tdb) tdb->last_error = tdb_logerr(tdb, state.error, TDB_LOG_ERROR, __location__ " Error during second traversal"); tdb1_transaction_cancel(tdb); - tdb1_close(tmp_db); + tdb_close(tmp_db); return -1; } - tdb1_close(tmp_db); + tdb_close(tmp_db); if (tdb1_transaction_commit(tdb) != 0) { tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,