Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=eda8c09a3f0b644d14807b6e22c2caf9876859e1
commit eda8c09a3f0b644d14807b6e22c2caf9876859e1 Author: Michel Hermier <[email protected]> Date: Mon Aug 11 08:33:34 2014 +0200 libpacman: Extra list work to remove warning and prepare list implementation change. diff --git a/lib/libpacman/util/fdispatchlogger.c b/lib/libpacman/util/fdispatchlogger.c index db75fc2..49d1d66 100644 --- a/lib/libpacman/util/fdispatchlogger.c +++ b/lib/libpacman/util/fdispatchlogger.c @@ -38,8 +38,8 @@ void f_dispatchlogger_log(unsigned char flag, const char *message, void *data) FPtrListItem *end, *it; end = f_ptrlist_end(list); - for (it = f_ptrlist_first(list); it != end; it = it->next) { - f_logger_logs((FLogger *)it->data, flag, message); + for (it = f_ptrlist_first(list); it != end; it = f_ptrlistitem_next(it)) { + f_logger_logs((FLogger *)f_ptrlistitem_data(it), flag, message); } } diff --git a/lib/libpacman/util/fptrlist.c b/lib/libpacman/util/fptrlist.c index 93c2fcf..1ebc694 100644 --- a/lib/libpacman/util/fptrlist.c +++ b/lib/libpacman/util/fptrlist.c @@ -156,15 +156,15 @@ int f_ptrlist_append(FPtrList *self, void *data) int f_ptrlist_clear(FPtrList *list, FVisitor *visitor) { - FPtrList *next; + FPtrListItem *end = f_ptrlist_end(list), *it = f_ptrlist_first(list), *next; - while(list != NULL) { - next = list->next; + while(it != end) { + next = f_ptrlistitem_next(it); if(visitor != NULL) { - f_visit(list->data, visitor); + f_visit(f_ptrlistitem_data(it), visitor); } - free(list); - list = next; + free(it); + it = next; } return 0; } @@ -177,11 +177,16 @@ int f_ptrlist_contains_ptr(const FPtrList *list, const void *ptr) FPtrList *f_ptrlist_filter(const FPtrList *list, const FMatcher *matcher) { FPtrList *retlist = NULL; + const FPtrListItem *end = f_ptrlist_end_const(list), *it = f_ptrlist_first_const(list); - for(; list != NULL; list = list->next) { - if(f_match(list->data, matcher)) { - retlist = f_ptrlist_append(retlist, list->data); + for(; it != end; it = f_ptrlistitem_next(it)) { + void *data = f_ptrlistitem_data(it); + + if(f_match(data, matcher)) { + retlist = f_ptrlist_append(retlist, data); } } return retlist; } + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/util/fptrlist.h b/lib/libpacman/util/fptrlist.h index 634da63..43afa33 100644 --- a/lib/libpacman/util/fptrlist.h +++ b/lib/libpacman/util/fptrlist.h @@ -66,17 +66,17 @@ FPtrList *f_ptrlist_append(FPtrList *list, void *data); int f_ptrlist_append(FPtrList *list, void *data); #endif int f_ptrlist_clear(FPtrList *list, FVisitor *visitor); -#define f_ptrlist_contains f_list_contains +#define f_ptrlist_contains(self, comparator, comparator_data) f_list_contains(f_ptrlist_as_FList_const(self), (FListItemComparatorFunc)comparator, comparator_data) int f_ptrlist_contains_ptr(const FPtrList *list, const void *ptr); #define f_ptrlist_count f_list_count #define f_ptrlist_empty f_list_empty #define f_ptrlist_end(list) ((FPtrListItem *)f_ptrlist_end_const(list)) #define f_ptrlist_end_const(list) ((const FPtrListItem *)f_list_end_const(f_ptrlist_as_FList_const(list))) FPtrList *f_ptrlist_filter(const FPtrList *list, const FMatcher *matcher); -#define f_ptrlist_first(self) ((FPtrListItem *)f_list_first(self)) -#define f_ptrlist_first_const(self) ((const FPtrListItem *)f_list_first_const(self)) -#define f_ptrlist_last(self) ((FPtrListItem *)f_list_last(self)) -#define f_ptrlist_last_const(self) ((const FPtrListItem *)f_list_last_const(self)) +#define f_ptrlist_first(self) ((FPtrListItem *)f_ptrlist_first_const(self)) +#define f_ptrlist_first_const(self) ((const FPtrListItem *)f_list_first_const(f_ptrlist_as_FList_const(self))) +#define f_ptrlist_last(self) ((FPtrListItem *)f_ptrlist_last_const(self)) +#define f_ptrlist_last_const(self) ((const FPtrListItem *)f_list_last_const(f_ptrlist_as_FList_const(self))) #ifdef __cplusplus } diff --git a/lib/libpacman/util/list.c b/lib/libpacman/util/list.c index ef8fa49..ffd2b4c 100644 --- a/lib/libpacman/util/list.c +++ b/lib/libpacman/util/list.c @@ -34,17 +34,15 @@ /* Add items to a list in sorted order. Use the given comparison function to * determine order. */ -pmlist_t *_pacman_list_add_sorted(pmlist_t *list, void *data, _pacman_fn_cmp fn) +FPtrList *_pacman_list_add_sorted(FPtrList *list, void *data, _pacman_fn_cmp fn) { - pmlist_t *add; - pmlist_t *prev = NULL; - pmlist_t *iter = list; + FPtrListItem *add, *end = f_ptrlist_end(list), *prev = NULL, *iter = f_ptrlist_first(list); add = _pacman_list_new(); add->data = data; /* Find insertion point. */ - while(iter) { + while(iter != end) { if(fn(add->data, iter->data) <= 0) break; prev = iter; iter = iter->next; @@ -73,11 +71,11 @@ pmlist_t *_pacman_list_add_sorted(pmlist_t *list, void *data, _pacman_fn_cmp fn) * Otherwise, it is set to NULL. * Return the new list (without the removed element). */ -pmlist_t *_pacman_list_remove(pmlist_t *haystack, void *needle, _pacman_fn_cmp fn, void **data) +FPtrList *_pacman_list_remove(FPtrList *haystack, void *needle, _pacman_fn_cmp fn, void **data) { - pmlist_t *i = haystack; + FPtrListItem *end = f_ptrlist_end(haystack), *i = f_ptrlist_first(haystack); - if(data) { + if(data != end) { *data = NULL; } @@ -118,16 +116,16 @@ pmlist_t *_pacman_list_remove(pmlist_t *haystack, void *needle, _pacman_fn_cmp f * * The caller is responsible for freeing the old list */ -pmlist_t *_pacman_list_reverse(pmlist_t *list) +FPtrList *_pacman_list_reverse(FPtrList *list) { /* simple but functional -- we just build a new list, starting * with the old list's tail */ - pmlist_t *newlist = NULL; - pmlist_t *lp; + FPtrList *newlist = f_ptrlist_new(); + FPtrListItem *it; - for(lp = f_ptrlist_last(list); lp; lp = lp->prev) { - newlist = _pacman_list_add(newlist, lp->data); + for(it = f_ptrlist_last(list); it; it = f_ptrlistitem_previous(it)) { + newlist = _pacman_list_add(newlist, it->data); } return(newlist); diff --git a/lib/libpacman/util/list.h b/lib/libpacman/util/list.h index 795878f..ffd918b 100644 --- a/lib/libpacman/util/list.h +++ b/lib/libpacman/util/list.h @@ -46,9 +46,9 @@ typedef int (*_pacman_fn_cmp)(const void *, const void *); #define _pacman_list_empty f_ptrlist_empty #define _pacman_list_last f_ptrlist_last -pmlist_t *_pacman_list_add_sorted(pmlist_t *list, void *data, _pacman_fn_cmp fn); -pmlist_t *_pacman_list_remove(pmlist_t *haystack, void *needle, _pacman_fn_cmp fn, void **data); -pmlist_t *_pacman_list_reverse(pmlist_t *list); +FPtrList *_pacman_list_add_sorted(FPtrList *list, void *data, _pacman_fn_cmp fn); +FPtrList *_pacman_list_remove(FPtrList *haystack, void *needle, _pacman_fn_cmp fn, void **data); +FPtrList *_pacman_list_reverse(FPtrList *list); #ifdef __cplusplus } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
