Skip to content
Snippets Groups Projects
Commit a02cd3ac authored by Marek Vavruša's avatar Marek Vavruša
Browse files

lib/zonecut: use mempool for nsset pack

parent f818ff54
No related merge requests found
......@@ -78,7 +78,7 @@ typedef array_t(uint8_t) pack_t;
array_clear(pack)
/** @internal Clear pack with a callback. */
#define pack_clear_mm(pack, free, baton) \
array_clear_mm(pack, array_std_free, baton)
array_clear_mm((pack), (free), (baton))
/** Incrementally reserve objects in the pack. */
#define pack_reserve(pack, objs_count, objs_len) \
pack_reserve_mm((pack), (objs_count), (objs_len), array_std_reserve, NULL)
......
......@@ -52,6 +52,25 @@ static const struct hint_info SBELT[HINT_COUNT] = {
{ U8("\x01""m""\x0c""root-servers""\x03""net"), U8("\xca\x0c\x1b!") }, /* 202.12.27.33 */
};
static inline int nsset_reserve(void *baton, char **mem, size_t elm_size, size_t want, size_t *have)
{
if (*have >= want) {
return 0;
} else {
mm_ctx_t *pool = baton;
size_t next_size = (want + 3);
void *mem_new = mm_alloc(pool, next_size * elm_size);
if (mem_new != NULL) {
memcpy(mem_new, *mem, (*have)*(elm_size));
mm_free(pool, *mem);
*mem = mem_new;
*have = next_size;
return 0;
}
}
return -1;
}
static void update_cut_name(struct kr_zonecut *cut, const knot_dname_t *name)
{
if (knot_dname_is_equal(name, cut->name)) {
......@@ -126,7 +145,7 @@ int kr_zonecut_add(struct kr_zonecut *cut, const knot_dname_t *ns, const knot_rd
return kr_ok();
}
uint16_t rdlen = knot_rdata_rdlen(rdata);
int ret = pack_reserve(*pack, 1, rdlen);
int ret = pack_reserve_mm(*pack, 1, rdlen, nsset_reserve, cut->pool);
if (ret != 0) {
return kr_error(ENOMEM);
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment