diff options
author | Dan McGee <dan@archlinux.org> | 2011-03-25 21:34:39 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-03-25 21:40:12 +0100 |
commit | c40fc6b80d4a97e3333afab6d2ce8290aaa29c46 (patch) | |
tree | 41807758c7c17c47b39b05af0cf1710301ec30a9 /lib/libalpm | |
parent | 7f480ccc0de9438ef499685088a49b3c5964606b (diff) | |
download | pacman-c40fc6b80d4a97e3333afab6d2ce8290aaa29c46.tar.gz pacman-c40fc6b80d4a97e3333afab6d2ce8290aaa29c46.tar.xz |
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>
Diffstat (limited to 'lib/libalpm')
-rw-r--r-- | lib/libalpm/package.c | 16 |
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); |