list: add LIST_CLEAR() helper that empties the list

This commit is contained in:
David Tardon
2023-08-17 09:48:17 +02:00
parent c0083c9ce0
commit d327b7752f
2 changed files with 37 additions and 0 deletions
+25
View File
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "alloc-util.h"
#include "list.h"
int main(int argc, const char *argv[]) {
@@ -254,5 +255,29 @@ int main(int argc, const char *argv[]) {
assert_se(LIST_POP(item_list, head) == items + 0);
assert_se(LIST_POP(item_list, head) == NULL);
/* No-op on an empty list */
LIST_CLEAR(item_list, head, free);
/* A non-empty list is cleared */
assert_se(LIST_PREPEND(item_list, head, new0(list_item, 1)));
assert_se(LIST_PREPEND(item_list, head, new0(list_item, 1)));
LIST_CLEAR(item_list, head, free);
assert_se(head == NULL);
/* A list can be cleared partially */
assert_se(LIST_PREPEND(item_list, head, new0(list_item, 1)));
assert_se(LIST_PREPEND(item_list, head, new0(list_item, 1)));
assert_se(LIST_PREPEND(item_list, head, items + 0) == items + 0);
LIST_CLEAR(item_list, head->item_list_next, free);
assert_se(head == items + 0);
assert_se(head->item_list_next == NULL);
return 0;
}