Diff between 929ade555d43d80642aafbed70e7d2fd7147aa2d and 0a68167f70e8725df76ebdf66ce798730840b60a

Changed Files

File Additions Deletions Status
src/shared/queue.c +15 -0 modified
src/shared/queue.h +3 -0 modified

Full Patch

diff --git a/src/shared/queue.c b/src/shared/queue.c
index 27a030b..bfc8da0 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 66b7564..151e60c 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);