summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2015-10-20 16:12:16 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2015-10-30 15:47:56 +0100
commit77605457e7cf550364355b03cb5544b57d3c046d (patch)
treee08ed013695eacce6f31055b8d9faae874460a18
parent0d5b1294f0350e10698232eb764c28b3ca54df1a (diff)
downloadlvm2-77605457e7cf550364355b03cb5544b57d3c046d.tar.gz
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.
-rw-r--r--lib/datastruct/str_list.c13
-rw-r--r--lib/datastruct/str_list.h2
2 files changed, 15 insertions, 0 deletions
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