summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-11-17 15:49:40 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-11-18 16:34:02 +0200
commitfe7d07fadd83a3e8a19498e9c955a3500b56de83 (patch)
treef5a008ab11492868c2fcade9f52800f2af251654 /src
parent5d3ac6da5a0e8aebe3cf4ab5b403c5c9ca267e73 (diff)
downloadbluez-fe7d07fadd83a3e8a19498e9c955a3500b56de83.tar.gz
shared/queue: Simplify queue_remove_all
This makes use of queue_remove_if if possible.
Diffstat (limited to 'src')
-rw-r--r--src/shared/queue.c28
1 files 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;