diff --git a/common/list.c b/common/list.c index 45efc16f2..ef1cfda83 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 aff6800f0..90d0ad36d 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