]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/transaction.c
tdb2: rework free.c functions to return enum TDB_ERROR.
[ccan] / ccan / tdb2 / transaction.c
index 2c9f354a2724ce2dc48dc64e3971f52ca9acb568..604861b738e75e9c7efab447f7d26d19780a5ffc 100644 (file)
@@ -642,8 +642,8 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
        enum TDB_ERROR ecode;
 
        recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
-       if (recovery_head == TDB_OFF_ERR) {
-               tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+       if (TDB_OFF_IS_ERR(recovery_head)) {
+               tdb_logerr(tdb, recovery_head, TDB_LOG_ERROR,
                         "tdb_recovery_allocate:"
                         " failed to read recovery head");
                return -1;
@@ -681,9 +681,10 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
           the transaction) */
        if (recovery_head != 0) {
                add_stat(tdb, frees, 1);
-               if (add_free_record(tdb, recovery_head,
-                                   sizeof(rec) + rec.max_len) != 0) {
-                       tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+               ecode = add_free_record(tdb, recovery_head,
+                                       sizeof(rec) + rec.max_len);
+               if (ecode != TDB_SUCCESS) {
+                       tdb_logerr(tdb, ecode, TDB_LOG_ERROR,
                                   "tdb_recovery_allocate:"
                                   " failed to free previous recovery area");
                        return -1;
@@ -1108,8 +1109,8 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 
        /* find the recovery area */
        recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
-       if (recovery_head == TDB_OFF_ERR) {
-               tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+       if (TDB_OFF_IS_ERR(recovery_head)) {
+               tdb_logerr(tdb, recovery_head, TDB_LOG_ERROR,
                         "tdb_transaction_recover:"
                         " failed to read recovery head");
                return -1;
@@ -1121,8 +1122,9 @@ int tdb_transaction_recover(struct tdb_context *tdb)
        }
 
        /* read the recovery record */
-       if (tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec)) == -1) {
-               tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+       ecode = tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec));
+       if (ecode != TDB_SUCCESS) {
+               tdb_logerr(tdb, ecode, TDB_LOG_ERROR,
                           "tdb_transaction_recover:"
                           " failed to read recovery record");
                return -1;
@@ -1193,9 +1195,11 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 
        /* if the recovery area is after the recovered eof then remove it */
        if (recovery_eof <= recovery_head) {
-               if (tdb_write_off(tdb, offsetof(struct tdb_header,recovery), 0)
-                   == -1) {
-                       tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+               ecode = tdb_write_off(tdb, offsetof(struct tdb_header,
+                                                   recovery),
+                                     0);
+               if (ecode != TDB_SUCCESS) {
+                       tdb_logerr(tdb, ecode, TDB_LOG_ERROR,
                                 "tdb_transaction_recover:"
                                 " failed to remove recovery head");
                        return -1;
@@ -1203,11 +1207,12 @@ int tdb_transaction_recover(struct tdb_context *tdb)
        }
 
        /* remove the recovery magic */
-       if (tdb_write_off(tdb,
-                         recovery_head
-                         + offsetof(struct tdb_recovery_record, magic),
-                         TDB_RECOVERY_INVALID_MAGIC) == -1) {
-               tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
+       ecode = tdb_write_off(tdb,
+                             recovery_head
+                             + offsetof(struct tdb_recovery_record, magic),
+                             TDB_RECOVERY_INVALID_MAGIC);
+       if (ecode != TDB_SUCCESS) {
+               tdb_logerr(tdb, ecode, TDB_LOG_ERROR,
                         "tdb_transaction_recover:"
                         " failed to remove recovery magic");
                return -1;
@@ -1233,10 +1238,12 @@ bool tdb_needs_recovery(struct tdb_context *tdb)
 {
        tdb_off_t recovery_head;
        struct tdb_recovery_record rec;
+       enum TDB_ERROR ecode;
 
        /* find the recovery area */
        recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
-       if (recovery_head == TDB_OFF_ERR) {
+       if (TDB_OFF_IS_ERR(recovery_head)) {
+               tdb->ecode = recovery_head;
                return true;
        }
 
@@ -1246,7 +1253,9 @@ bool tdb_needs_recovery(struct tdb_context *tdb)
        }
 
        /* read the recovery record */
-       if (tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec)) == -1) {
+       ecode = tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec));
+       if (ecode != TDB_SUCCESS) {
+               tdb->ecode = ecode;
                return true;
        }