[pacman-dev] [PATCH] Simplify alpm_list_previous

Allan McRae allan at archlinux.org
Sun Jul 3 22:16:35 EDT 2011


We can readily detect the first node in a list by checking if
node->prev->next is NULL. So there is no need to pass the head
of the list to this function and its prototype now looks like
all the other item accessors.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 lib/libalpm/alpm_list.c |    7 +++----
 lib/libalpm/alpm_list.h |    2 +-
 lib/libalpm/remove.c    |    4 ++--
 3 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/lib/libalpm/alpm_list.c b/lib/libalpm/alpm_list.c
index 38cefa6..071cd99 100644
--- a/lib/libalpm/alpm_list.c
+++ b/lib/libalpm/alpm_list.c
@@ -547,11 +547,10 @@ inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
  *
  * @return the previous element, or NULL when no previous element exist
  */
-inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list,
-		const alpm_list_t *node)
+inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
 {
-	if(node && node != list) {
-		return node->prev;
+	if(list && list->prev->next) {
+		return list->prev;
 	} else {
 		return NULL;
 	}
diff --git a/lib/libalpm/alpm_list.h b/lib/libalpm/alpm_list.h
index 824e866..5e8ca46 100644
--- a/lib/libalpm/alpm_list.h
+++ b/lib/libalpm/alpm_list.h
@@ -69,7 +69,7 @@ alpm_list_t *alpm_list_reverse(alpm_list_t *list);
 /* item accessors */
 alpm_list_t *alpm_list_nth(const alpm_list_t *list, size_t n);
 alpm_list_t *alpm_list_next(const alpm_list_t *list);
-alpm_list_t *alpm_list_previous(const alpm_list_t *list, const alpm_list_t *node);
+alpm_list_t *alpm_list_previous(const alpm_list_t *list);
 alpm_list_t *alpm_list_last(const alpm_list_t *list);
 void *alpm_list_getdata(const alpm_list_t *entry);
 
diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c
index 59374dc..9b8517c 100644
--- a/lib/libalpm/remove.c
+++ b/lib/libalpm/remove.c
@@ -329,7 +329,7 @@ int _alpm_upgraderemove_package(alpm_handle_t *handle,
 	_alpm_log(handle, ALPM_LOG_DEBUG, "removing %ld files\n", (unsigned long)filenum);
 
 	/* iterate through the list backwards, unlinking files */
-	for(lp = alpm_list_last(files); lp; lp = alpm_list_previous(files, lp)) {
+	for(lp = alpm_list_last(files); lp; lp = alpm_list_previous(lp)) {
 		unlink_file(handle, oldpkg, lp->data, skip_remove, 0);
 	}
 	FREELIST(skip_remove);
@@ -406,7 +406,7 @@ int _alpm_remove_packages(alpm_handle_t *handle)
 					pkg_count, (pkg_count - targcount + 1));
 
 			/* iterate through the list backwards, unlinking files */
-			for(lp = alpm_list_last(files); lp; lp = alpm_list_previous(files, lp)) {
+			for(lp = alpm_list_last(files); lp; lp = alpm_list_previous(lp)) {
 				int percent;
 				unlink_file(handle, info, lp->data, NULL, trans->flags & ALPM_TRANS_FLAG_NOSAVE);
 
-- 
1.7.6



More information about the pacman-dev mailing list