X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb.c;h=1dbbb7e93bdf46c16e8200abb9b5e0b3b3a885f4;hb=63e80faf9b42fbe73e25c804dd734b6179e42c24;hp=254aac5f25a94e1daae9692ea03a9c42b1a6ddce;hpb=f6067e4cbd7b7415571f12438aec00faec5657fb;p=ccan diff --git a/ccan/tdb2/tdb.c b/ccan/tdb2/tdb.c index 254aac5f..1dbbb7e9 100644 --- a/ccan/tdb2/tdb.c +++ b/ccan/tdb2/tdb.c @@ -382,6 +382,11 @@ const char *tdb_errorstr(enum TDB_ERROR ecode) return "Invalid error code"; } +enum TDB_ERROR tdb_error(struct tdb_context *tdb) +{ + return tdb->last_error; +} + enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb, enum TDB_ERROR ecode, enum tdb_log_level level, @@ -422,7 +427,6 @@ enum TDB_ERROR tdb_parse_record_(struct tdb_context *tdb, tdb_off_t off; struct tdb_used_record rec; struct hash_info h; - TDB_DATA data; enum TDB_ERROR ecode; off = find_and_lock(tdb, key, F_RDLCK, &h, &rec, NULL); @@ -433,16 +437,16 @@ enum TDB_ERROR tdb_parse_record_(struct tdb_context *tdb, if (!off) { ecode = TDB_ERR_NOEXIST; } else { - data.dsize = rec_data_length(&rec); - data.dptr = (void *)tdb_access_read(tdb, - off + sizeof(rec) - + key.dsize, - data.dsize, false); - if (TDB_PTR_IS_ERR(data.dptr)) { - ecode = TDB_PTR_ERR(data.dptr); + const void *dptr; + dptr = tdb_access_read(tdb, off + sizeof(rec) + key.dsize, + rec_data_length(&rec), false); + if (TDB_PTR_IS_ERR(dptr)) { + ecode = TDB_PTR_ERR(dptr); } else { + TDB_DATA data = tdb_mkdata(dptr, rec_data_length(&rec)); + ecode = parse(key, data, p); - tdb_access_release(tdb, data.dptr); + tdb_access_release(tdb, dptr); } }