]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb.c
tdb2: rework some io.c functions to encode errors in their pointer returns.
[ccan] / ccan / tdb2 / tdb.c
index ba5d37598e68d522366682fb1b59c8c90f8f5412..130bb6b594f687ea81cd3ed59b223dcaf861b8bc 100644 (file)
@@ -413,12 +413,18 @@ static int update_rec_hdr(struct tdb_context *tdb,
                          uint64_t h)
 {
        uint64_t dataroom = rec_data_length(rec) + rec_extra_padding(rec);
+       enum TDB_ERROR ecode;
 
        if (set_header(tdb, rec, TDB_USED_MAGIC, keylen, datalen,
                       keylen + dataroom, h))
                return -1;
 
-       return tdb_write_convert(tdb, off, rec, sizeof(*rec));
+       ecode = tdb_write_convert(tdb, off, rec, sizeof(*rec));
+       if (ecode != TDB_SUCCESS) {
+               tdb->ecode = ecode;
+               return -1;
+       }
+       return 0;
 }
 
 /* Returns -1 on error, 0 on OK */
@@ -625,6 +631,10 @@ struct tdb_data tdb_fetch(struct tdb_context *tdb, struct tdb_data key)
                ret.dsize = rec_data_length(&rec);
                ret.dptr = tdb_alloc_read(tdb, off + sizeof(rec) + key.dsize,
                                          ret.dsize);
+               if (TDB_PTR_IS_ERR(ret.dptr)) {
+                       tdb->ecode = TDB_PTR_ERR(ret.dptr);
+                       ret = tdb_null;
+               }
        }
 
        tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, F_RDLCK);