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