From: Vladimír Čunát Date: Fri, 14 May 2021 08:44:26 +0000 (+0200) Subject: lib/cache: simplify rdataset_dematerialize() X-Git-Tag: v5.4.0~18^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=758fd76f72d756f57a264fa3b5a027f29e4b8960;p=thirdparty%2Fknot-resolver.git lib/cache: simplify rdataset_dematerialize() Trying to handle the NULL here was pointless, so let's simplify. As it was, it couldn't trigger anyway (would crash earlier). --- diff --git a/lib/cache/api.c b/lib/cache/api.c index a7648dc0a..8023c8c85 100644 --- a/lib/cache/api.c +++ b/lib/cache/api.c @@ -610,14 +610,8 @@ static ssize_t stash_rrset(struct kr_cache *cache, const struct kr_query *qry, eh->time = timestamp; eh->ttl = MAX(MIN(ttl, cache->ttl_max), cache->ttl_min); eh->rank = rank; - if (rdataset_dematerialize(&rr->rrs, eh->data) - || rdataset_dematerialize(rds_sigs, eh->data + rr_ssize)) { - /* minimize the damage from incomplete write; TODO: better */ - eh->time = 0; - eh->ttl = 0; - eh->rank = 0; - kr_require(false); - } + rdataset_dematerialize(&rr->rrs, eh->data); + rdataset_dematerialize(rds_sigs, eh->data + rr_ssize); kr_require(entry_h_consistent_E(val_new_entry, rr->type)); #if 0 /* Occasionally useful when debugging some kinds of changes. */ diff --git a/lib/cache/entry_rr.c b/lib/cache/entry_rr.c index 663bb6b04..07e9a8573 100644 --- a/lib/cache/entry_rr.c +++ b/lib/cache/entry_rr.c @@ -9,15 +9,14 @@ #include "lib/cache/impl.h" -int rdataset_dematerialize(const knot_rdataset_t *rds, uint8_t * restrict data) +void rdataset_dematerialize(const knot_rdataset_t *rds, uint8_t * restrict data) { /* FIXME: either give up on even alignment and thus direct usability * of rdatasets as they are in lmdb, or align inside cdb_* functions * (request sizes one byte longer and shift iff on an odd address). */ //if ((size_t)data & 1) VERBOSE_MSG(NULL, "dematerialize: odd address\n"); //const uint8_t *data0 = data; - if (!kr_assume(data)) - return kr_error(EINVAL); + kr_require(data); const uint16_t rr_count = rds ? rds->count : 0; memcpy(data, &rr_count, sizeof(rr_count)); data += sizeof(rr_count); @@ -26,8 +25,7 @@ int rdataset_dematerialize(const knot_rdataset_t *rds, uint8_t * restrict data) data += rds->size; } //VERBOSE_MSG(NULL, "dematerialized to %d B\n", (int)(data - data0)); - (void)data; - return kr_ok(); + (void)data; // silence analyzers } /** Materialize a knot_rdataset_t from cache with given TTL. diff --git a/lib/cache/impl.h b/lib/cache/impl.h index 54b0802c1..ef07b828f 100644 --- a/lib/cache/impl.h +++ b/lib/cache/impl.h @@ -317,8 +317,8 @@ static inline int rdataset_dematerialized_size(const uint8_t *data, uint16_t *rd return rdata - (data + sizeof(count)); } -/** Serialize an rdataset. */ -int rdataset_dematerialize(const knot_rdataset_t *rds, uint8_t * restrict data); +/** Serialize an rdataset. It may be NULL as short-hand for empty. */ +void rdataset_dematerialize(const knot_rdataset_t *rds, uint8_t * restrict data); /** Partially constructed answer when gathering RRsets from cache. */