From 1aa08fe0ad078896cb8194414b22482964d0146b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Vavru=C5=A1a?= Date: Wed, 20 May 2015 14:24:55 +0200 Subject: [PATCH] lib/utils: made mm_reserve generic in library --- lib/utils.c | 22 +++++++++++++++++++++- lib/utils.h | 5 ++++- lib/zonecut.c | 21 +-------------------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/lib/utils.c b/lib/utils.c index 2931fe004..9c36726be 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -23,6 +23,7 @@ #include "lib/defines.h" #include "lib/utils.h" +#include "lib/generic/array.h" /* * Macros. @@ -112,4 +113,23 @@ int kr_randseed(char *buf, size_t buflen) gettimeofday(&tv, NULL); memcpy(buf, &tv, buflen < sizeof(tv) ? buflen : sizeof(tv)); return 0; -} \ No newline at end of file +} + +int mm_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 = array_next_count(want); + 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; +} diff --git a/lib/utils.h b/lib/utils.h index 69a7b407a..3d1c83a3b 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -38,4 +38,7 @@ extern void _cleanup_fclose(FILE **p); char* kr_strcatdup(unsigned n, ...); /** Fill buffer with random seed. */ -int kr_randseed(char *buf, size_t buflen); \ No newline at end of file +int kr_randseed(char *buf, size_t buflen); + +/** Memory reservation routine for mm_ctx_t */ +int mm_reserve(void *baton, char **mem, size_t elm_size, size_t want, size_t *have); diff --git a/lib/zonecut.c b/lib/zonecut.c index 3d89c53de..fef8061ee 100644 --- a/lib/zonecut.c +++ b/lib/zonecut.c @@ -52,25 +52,6 @@ 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)) { @@ -145,7 +126,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_mm(*pack, 1, rdlen, nsset_reserve, cut->pool); + int ret = pack_reserve_mm(*pack, 1, rdlen, mm_reserve, cut->pool); if (ret != 0) { return kr_error(ENOMEM); } -- 2.47.2