]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/cache: simplify rdataset_dematerialize()
authorVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 14 May 2021 08:44:26 +0000 (10:44 +0200)
committerTomas Krizek <tomas.krizek@nic.cz>
Tue, 25 May 2021 12:39:45 +0000 (14:39 +0200)
Trying to handle the NULL here was pointless, so let's simplify.
As it was, it couldn't trigger anyway (would crash earlier).

lib/cache/api.c
lib/cache/entry_rr.c
lib/cache/impl.h

index a7648dc0a5cf7c023a3a2e143da66041dac6dae5..8023c8c856bc67ae4e7e9a7d53864363c2c9be31 100644 (file)
@@ -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. */
index 663bb6b04648426d6ce800955e4c0c3d66192687..07e9a8573e3feb1df42996c93d384a68f8435af6 100644 (file)
@@ -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.
index 54b0802c12ac177bd51bc3762dffaea77c7d3fed..ef07b828f00aa0c7c43489de42b5fd06d4fa8fdf 100644 (file)
@@ -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. */