diff --git a/common/list.c b/common/list.c
index 45efc16f..ef1cfda8 100644
--- a/common/list.c
+++ b/common/list.c
@@ -53,3 +53,13 @@ void list_cat(list_t *list, list_t *source) {
 void list_sort(list_t *list, int compare(const void *left, const void *right)) {
 	qsort(list->items, list->length, sizeof(void *), compare);
 }
+
+int list_seq_find(list_t *list, int (*cmp)(const void *item, const void *data), const void *data) {
+	for (int i = 0; i < list->length; i++) {
+		void *item = list->items[i];
+		if ((cmp)(item, data) == 0) {
+			return i;
+		}
+	}
+	return -1;
+}
diff --git a/include/list.h b/include/list.h
index aff6800f..90d0ad36 100644
--- a/include/list.h
+++ b/include/list.h
@@ -15,5 +15,8 @@ void list_del(list_t *list, int index);
 void list_cat(list_t *list, list_t *source);
 // See qsort
 void list_sort(list_t *list, int compare(const void *left, const void *right));
+// Return index for first item in list that returns 0 for given compare
+// function or -1 if none matches.
+int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to);
 
 #endif