diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-11-17 15:49:40 +0200 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-11-18 16:34:02 +0200 |
commit | fe7d07fadd83a3e8a19498e9c955a3500b56de83 (patch) | |
tree | f5a008ab11492868c2fcade9f52800f2af251654 /src | |
parent | 5d3ac6da5a0e8aebe3cf4ab5b403c5c9ca267e73 (diff) | |
download | bluez-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.c | 28 |
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; |