From 6518e361171f64bcaaa4bf868139362ed95cc2e0 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Sat, 20 Oct 2018 01:30:31 +0200 Subject: New upstream version 1.14.2 --- shared/c-list/src/c-list.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'shared/c-list/src') diff --git a/shared/c-list/src/c-list.h b/shared/c-list/src/c-list.h index ff434d8d..3d44e330 100644 --- a/shared/c-list/src/c-list.h +++ b/shared/c-list/src/c-list.h @@ -366,6 +366,25 @@ static inline CList *c_list_last(CList *list) { _iter = (_safe), \ _safe = c_list_entry((_safe)->_m.next, __typeof__(*_iter), _m)) \ +/** + * c_list_flush() - flush all entries from a list + * @list: list to flush + * + * This unlinks all entries from the given list @list and reinitializes their + * link-nodes via C_LIST_INIT(). + * + * Note that the entries are not modified in any other way, nor is their memory + * released. This function just unlinks them and resets all the list nodes. It + * is particularly useful with temporary lists on the stack in combination with + * the GCC-extension __attribute__((__cleanup__(arg))). + */ +static inline void c_list_flush(CList *list) { + CList *iter, *safe; + + c_list_for_each_safe_unlink(iter, safe, list) + /* empty */ ; +} + /** * c_list_length() - return number of linked entries, excluding the head * @list: list to operate on -- cgit 1.3.0-6-gf8a5