summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-03-25 15:34:39 -0500
committerDan McGee <dan@archlinux.org>2011-03-25 15:40:12 -0500
commitc40fc6b80d4a97e3333afab6d2ce8290aaa29c46 (patch)
tree41807758c7c17c47b39b05af0cf1710301ec30a9
parent7f480ccc0de9438ef499685088a49b3c5964606b (diff)
downloadpacman-c40fc6b80d4a97e3333afab6d2ce8290aaa29c46.tar.gz
pacman-c40fc6b80d4a97e3333afab6d2ce8290aaa29c46.zip
Rework find_requiredby() to not use _alpm_dep_edge()
And move the sort after the final loop; we don't need to sort once for each database we look at. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/package.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 18d77d65..adb1ce9e 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -339,14 +339,14 @@ static void find_requiredby(pmpkg_t *pkg, pmdb_t *db, alpm_list_t **reqs)
{
const alpm_list_t *i;
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
- if(!i->data) {
- continue;
- }
pmpkg_t *cachepkg = i->data;
- if(_alpm_dep_edge(cachepkg, pkg)) {
- const char *cachepkgname = cachepkg->name;
- if(alpm_list_find_str(*reqs, cachepkgname) == NULL) {
- *reqs = alpm_list_add(*reqs, strdup(cachepkgname));
+ alpm_list_t *i;
+ for(i = alpm_pkg_get_depends(cachepkg); i; i = i->next) {
+ if(_alpm_depcmp(pkg, i->data)) {
+ const char *cachepkgname = cachepkg->name;
+ if(alpm_list_find_str(*reqs, cachepkgname) == NULL) {
+ *reqs = alpm_list_add(*reqs, strdup(cachepkgname));
+ }
}
}
}
@@ -377,8 +377,8 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
for(i = handle->dbs_sync; i; i = i->next) {
db = i->data;
find_requiredby(pkg, db, &reqs);
- reqs = alpm_list_msort(reqs, alpm_list_count(reqs), _alpm_str_cmp);
}
+ reqs = alpm_list_msort(reqs, alpm_list_count(reqs), _alpm_str_cmp);
}
}
return(reqs);