diff options
-rw-r--r-- | common/list.c | 10 | ||||
-rw-r--r-- | include/list.h | 3 |
2 files changed, 13 insertions, 0 deletions
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) { | |||
53 | void list_sort(list_t *list, int compare(const void *left, const void *right)) { | 53 | void list_sort(list_t *list, int compare(const void *left, const void *right)) { |
54 | qsort(list->items, list->length, sizeof(void *), compare); | 54 | qsort(list->items, list->length, sizeof(void *), compare); |
55 | } | 55 | } |
56 | |||
57 | int list_seq_find(list_t *list, int (*cmp)(const void *item, const void *data), const void *data) { | ||
58 | for (int i = 0; i < list->length; i++) { | ||
59 | void *item = list->items[i]; | ||
60 | if ((cmp)(item, data) == 0) { | ||
61 | return i; | ||
62 | } | ||
63 | } | ||
64 | return -1; | ||
65 | } | ||
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); | |||
15 | void list_cat(list_t *list, list_t *source); | 15 | void list_cat(list_t *list, list_t *source); |
16 | // See qsort | 16 | // See qsort |
17 | void list_sort(list_t *list, int compare(const void *left, const void *right)); | 17 | void list_sort(list_t *list, int compare(const void *left, const void *right)); |
18 | // Return index for first item in list that returns 0 for given compare | ||
19 | // function or -1 if none matches. | ||
20 | int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to); | ||
18 | 21 | ||
19 | #endif | 22 | #endif |