[pacman-dev] [PATCH] Reduce unnecessary get_name() function calls

Dan McGee dan at archlinux.org
Wed Oct 21 00:29:13 EDT 2009


alpm_pkg_get_name() gives us little benefit in backend code besides a NULL
check on the package passed in; we could do that ourself if necessary. By
changing to direct references in the cases where we are sure we have a valid
package, we save a function call each time we need a package name. This
function can't be inlined because it is externally accessible.

This cuts the calls to get_name() from 1.3 million times in a
pacman -Qu operation to around 2400.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/package.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 572b863..83a2fb8 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -573,7 +573,7 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
 		}
 		pmpkg_t *cachepkg = i->data;
 		if(_alpm_dep_edge(cachepkg, pkg)) {
-			const char *cachepkgname = alpm_pkg_get_name(cachepkg);
+			const char *cachepkgname = pkg->name;
 			reqs = alpm_list_add(reqs, strdup(cachepkgname));
 		}
 	}
@@ -896,7 +896,7 @@ int _alpm_pkg_cmp(const void *p1, const void *p2)
 {
 	pmpkg_t *pkg1 = (pmpkg_t *)p1;
 	pmpkg_t *pkg2 = (pmpkg_t *)p2;
-	return(strcmp(alpm_pkg_get_name(pkg1), alpm_pkg_get_name(pkg2)));
+	return(strcmp(pkg1->name, pkg2->name));
 }
 
 /* Test for existence of a package in a alpm_list_t*
@@ -915,7 +915,7 @@ pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle)
 	for(lp = haystack; lp; lp = lp->next) {
 		pmpkg_t *info = lp->data;
 
-		if(info && strcmp(alpm_pkg_get_name(info), needle) == 0) {
+		if(info && strcmp(info->name, needle) == 0) {
 			return(info);
 		}
 	}
-- 
1.6.5.1



More information about the pacman-dev mailing list