From fe7d07fadd83a3e8a19498e9c955a3500b56de83 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 17 Nov 2014 15:49:40 +0200 Subject: [PATCH] shared/queue: Simplify queue_remove_all This makes use of queue_remove_if if possible. --- src/shared/queue.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/shared/queue.c b/src/shared/queue.c index 3ca3ca68e..db4a224da 100644 --- a/src/shared/queue.c +++ b/src/shared/queue.c @@ -312,31 +312,17 @@ unsigned int queue_remove_all(struct queue *queue, queue_match_func_t function, entry = queue->head; if (function) { - struct queue_entry *prev = NULL; - while (entry) { - if (function(entry->data, user_data)) { - struct queue_entry *tmp = entry; - - if (prev) - prev->next = entry->next; - else - queue->head = entry->next; - - if (!entry->next) - queue->tail = prev; + void *data; - entry = entry->next; + data = queue_remove_if(queue, function, user_data); + if (!data) + break; - if (destroy) - destroy(tmp->data); + if (destroy) + destroy(data); - free(tmp); - count++; - } else { - prev = entry; - entry = entry->next; - } + count++; } queue->entries -= count; -- 2.47.3