From: Vladimír Čunát Date: Sun, 1 Sep 2024 09:01:22 +0000 (+0200) Subject: lib/utils: generalize kr_strcatdup() for mempools X-Git-Tag: v6.0.9~21^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9215892b5722e2ab42d93ea9f466c6fc2fd97414;p=thirdparty%2Fknot-resolver.git lib/utils: generalize kr_strcatdup() for mempools It's trivial really, and I'd like to use it now. --- diff --git a/lib/utils.c b/lib/utils.c index d04f5467b..882aeb3e2 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -107,7 +107,7 @@ static inline int u16tostr(uint8_t *dst, uint16_t num) return 5; } -char* kr_strcatdup(unsigned n, ...) +char* kr_strcatdup_pool(knot_mm_t *pool, unsigned n, ...) { if (n < 1) { return NULL; @@ -132,7 +132,7 @@ char* kr_strcatdup(unsigned n, ...) char *result = NULL; if (total_len > 0) { if (unlikely(total_len == SIZE_MAX)) return NULL; - result = malloc(total_len + 1); + result = mm_alloc(pool, total_len + 1); } if (result) { char *stream = result; diff --git a/lib/utils.h b/lib/utils.h index e03b473dc..e8122c998 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -170,9 +170,11 @@ typedef struct kr_http_header_array_entry { /** Array of HTTP headers for DoH. */ typedef array_t(kr_http_header_array_entry_t) kr_http_header_array_t; -/** Concatenate N strings. */ +/** Concatenate N strings and put the result into a mempool. */ KR_EXPORT -char* kr_strcatdup(unsigned n, ...); +char* kr_strcatdup_pool(knot_mm_t *pool, unsigned n, ...); +/** Concatenate N strings. */ +#define kr_strcatdup(n, ...) kr_strcatdup_pool(NULL, n, ## __VA_ARGS__) /** Construct absolute file path, without resolving symlinks. * \return malloc-ed string or NULL (+errno in that case) */