From 77605457e7cf550364355b03cb5544b57d3c046d Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Tue, 20 Oct 2015 16:12:16 +0200 Subject: [PATCH] str_list: add str_list_destroy function The str_list_destroy function may be called to cleanup memory when the list is not used anymore and the list itself was not allocated from the memory pool. --- lib/datastruct/str_list.c | 13 +++++++++++++ lib/datastruct/str_list.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/lib/datastruct/str_list.c b/lib/datastruct/str_list.c index a600f607e..73b5534a0 100644 --- a/lib/datastruct/str_list.c +++ b/lib/datastruct/str_list.c @@ -247,3 +247,16 @@ bad: dm_pool_free(mem, list); return NULL; } + +void str_list_destroy(struct dm_list *list, int deallocate_strings) +{ + struct dm_str_list *sl, *tmp_sl; + + dm_list_iterate_items_safe(sl, tmp_sl, list) { + dm_list_del(&sl->list); + if (deallocate_strings) + dm_free((char *)sl->str); + dm_free(sl); + } + dm_free(list); +} diff --git a/lib/datastruct/str_list.h b/lib/datastruct/str_list.h index 268a3cf75..92ff8c5ea 100644 --- a/lib/datastruct/str_list.h +++ b/lib/datastruct/str_list.h @@ -32,5 +32,7 @@ int str_list_dup(struct dm_pool *mem, struct dm_list *sllnew, const struct dm_list *sllold); char *str_list_to_str(struct dm_pool *mem, const struct dm_list *list, const char *delim); struct dm_list *str_to_str_list(struct dm_pool *mem, const char *str, const char *delim, int ignore_multiple_delim); +/* Only for lists which were *not* allocated from the mem pool! */ +void str_list_destroy(struct dm_list *list, int deallocate_strings); #endif