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 */
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);