Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=cb7c0ff93c42a0ec38a03657dbb4c75e52b57fd3
commit cb7c0ff93c42a0ec38a03657dbb4c75e52b57fd3 Author: Michel Hermier <herm...@frugalware.org> Date: Sat Nov 16 21:42:23 2013 +0100 libpacman: Add generic f_list_contains. diff --git a/lib/libpacman/util/list.c b/lib/libpacman/util/list.c index 0bd38c6..53bcf30 100644 --- a/lib/libpacman/util/list.c +++ b/lib/libpacman/util/list.c @@ -27,6 +27,7 @@ /* pacman-g2 */ #include "list.h" +#include "fstdlib.h" #include "util.h" pmlist_t *_pacman_list_new() @@ -57,6 +58,16 @@ void _pacman_list_free(pmlist_t *list, _pacman_fn_free fn) } } +int f_list_contains(const pmlist_t *list, flist_compar_t compar, const void *ptr) +{ + for(; list != NULL; list = list->next) { + if(compar(list, ptr) == 0) { + return 1; + } + } + return 0; +} + int _pacman_list_count(const pmlist_t *list) { int i; @@ -72,16 +83,14 @@ int _pacman_list_empty(const pmlist_t *list) return list == NULL; } +static +int _pacman_ptrlistitem_ptrcmp(const pmlist_t *item, const void *ptr) { + return f_ptrcmp(item->data, ptr); +} + int _pacman_list_is_in(void *needle, const pmlist_t *haystack) { - const pmlist_t *lp; - - for(lp = haystack; lp; lp = lp->next) { - if(lp->data == needle) { - return(1); - } - } - return(0); + return f_list_contains(haystack, _pacman_ptrlistitem_ptrcmp, needle); } pmlist_t *_pacman_list_add(pmlist_t *list, void *data) diff --git a/lib/libpacman/util/list.h b/lib/libpacman/util/list.h index 14e5bca..f0599e1 100644 --- a/lib/libpacman/util/list.h +++ b/lib/libpacman/util/list.h @@ -23,6 +23,8 @@ #include "pacman.h" +typedef int (*flist_compar_t)(const pmlist_t *item, const void *ptr); + /* Chained list struct */ struct __pmlist_t { void *data; @@ -42,6 +44,7 @@ typedef int (*_pacman_fn_cmp)(const void *, const void *); pmlist_t *_pacman_list_new(void); void _pacman_list_free(pmlist_t *list, _pacman_fn_free fn); +int f_list_contains(const pmlist_t *list, flist_compar_t compar, const void *ptr); int _pacman_list_count(const pmlist_t *list); int _pacman_list_empty(const pmlist_t *list); int _pacman_list_is_in(void *needle, const pmlist_t *haystack); _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git