X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb1_tdb.c;h=384654ed941a87910a3b1c00be07a570f4cae018;hp=e9696000b86ec8b9937f8d398bf4e67a05c894a3;hb=98c754ffe65bc335f66161d6cc8705d4ea2710ec;hpb=a446f1d4d161d66bbb19ba2551cf6429a4865964;ds=sidebyside diff --git a/ccan/tdb2/tdb1_tdb.c b/ccan/tdb2/tdb1_tdb.c index e9696000..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, NULL); + 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,