From 07e2e5099de0e8bdd8c981a628d5cbe471f18d08 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 29 Jan 2023 20:11:02 +0000 Subject: [PATCH] sandbox: queue: add queue_delete_all() and QUEUE_INIT --- sandbox/queue/include/socks/queue.h | 3 +++ sandbox/queue/queue.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/sandbox/queue/include/socks/queue.h b/sandbox/queue/include/socks/queue.h index 713b444..77f0c96 100644 --- a/sandbox/queue/include/socks/queue.h +++ b/sandbox/queue/include/socks/queue.h @@ -5,6 +5,8 @@ #define QUEUE_CONTAINER(t, m, v) ((void *)((v) ? (uintptr_t)(v) - (offsetof(t, m)) : 0)) +#define QUEUE_INIT ((queue_t){ .q_first = NULL, .q_last = NULL, .q_length = 0}) + #define queue_foreach(iter_type, iter_name, queue_name, node_member) \ for (iter_type *iter_name = QUEUE_CONTAINER(iter_type, node_member, queue_first(queue_name)); \ iter_name; \ @@ -44,5 +46,6 @@ extern queue_entry_t *queue_pop_front(queue_t *q); extern queue_entry_t *queue_pop_back(queue_t *q); extern void queue_delete(queue_t *q, queue_entry_t *entry); +extern void queue_delete_all(queue_t *q); #endif diff --git a/sandbox/queue/queue.c b/sandbox/queue/queue.c index 1229da8..cf3ac8d 100644 --- a/sandbox/queue/queue.c +++ b/sandbox/queue/queue.c @@ -102,3 +102,16 @@ void queue_delete(queue_t *q, queue_entry_t *entry) entry->qe_next = entry->qe_prev = NULL; q->q_length--; } + +void queue_delete_all(queue_t *q) +{ + queue_entry_t *x = q->q_first; + while (x) { + queue_entry_t *next = x->qe_next; + x->qe_next = x->qe_prev = NULL; + x = next; + } + + q->q_first = q->q_last = NULL; + q->q_length = 0; +}