From a39cba252ede11013b600dd858c9459bb707d663 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Fri, 3 Nov 2023 16:59:32 +0000 Subject: [PATCH] strv: add strv_free_many() to be used with CLEANUP_ARRAY() --- src/basic/strv.c | 9 +++++++++ src/basic/strv.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/basic/strv.c b/src/basic/strv.c index 37c8f553eb..c2109d35bc 100644 --- a/src/basic/strv.c +++ b/src/basic/strv.c @@ -88,6 +88,15 @@ char** strv_free_erase(char **l) { return mfree(l); } +void strv_free_many(char ***strvs, size_t n) { + assert(strvs || n == 0); + + FOREACH_ARRAY (i, strvs, n) + strv_free(*i); + + free(strvs); +} + char** strv_copy_n(char * const *l, size_t m) { _cleanup_strv_free_ char **result = NULL; char **k; diff --git a/src/basic/strv.h b/src/basic/strv.h index 544d46a3f8..fec2616733 100644 --- a/src/basic/strv.h +++ b/src/basic/strv.h @@ -32,6 +32,8 @@ char** strv_free_erase(char **l); DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free_erase); #define _cleanup_strv_free_erase_ _cleanup_(strv_free_erasep) +void strv_free_many(char ***strvs, size_t n); + char** strv_copy_n(char * const *l, size_t n); static inline char** strv_copy(char * const *l) { return strv_copy_n(l, SIZE_MAX);