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

Reply via email to