From 0a68167f70e8725df76ebdf66ce798730840b60a Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 6 Jan 2014 12:29:46 -0800 Subject: [PATCH] shared: Add lookup function to queue handling --- src/shared/queue.c | 15 +++++++++++++++ src/shared/queue.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/shared/queue.c b/src/shared/queue.c index 27a030b93..bfc8da0f7 100644 --- a/src/shared/queue.c +++ b/src/shared/queue.c @@ -180,6 +180,21 @@ void queue_foreach(struct queue *queue, queue_foreach_func_t function, function(entry->data, user_data); } +void *queue_find(struct queue *queue, queue_match_func_t function, + void *user_data) +{ + struct queue_entry *entry; + + if (!queue || !function) + return NULL; + + for (entry = queue->head; entry; entry = entry->next) + if (function(entry->data, user_data)) + return entry->data; + + return NULL; +} + void *queue_remove_if(struct queue *queue, queue_match_func_t function, void *user_data) { diff --git a/src/shared/queue.h b/src/shared/queue.h index 66b7564ed..151e60cbd 100644 --- a/src/shared/queue.h +++ b/src/shared/queue.h @@ -43,6 +43,9 @@ void queue_foreach(struct queue *queue, queue_foreach_func_t function, typedef bool (*queue_match_func_t)(const void *a, const void *b); +void *queue_find(struct queue *queue, queue_match_func_t function, + void *user_data); + void *queue_remove_if(struct queue *queue, queue_match_func_t function, void *user_data); bool queue_remove_all(struct queue *queue, queue_destroy_func_t destroy); -- 2.47.3