Otherwise we don't use the version requirements, leading us to sometimes get the wrong results for lib32 .so deps. Fixes FS#59072. Signed-off-by: Johannes Löthberg <johannes@kyriasis.com> --- src/pactree.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/pactree.c b/src/pactree.c index 45d6e50..4f6faa9 100644 --- a/src/pactree.c +++ b/src/pactree.c @@ -411,14 +411,14 @@ static void print_end(void) } } -static alpm_list_t *get_pkg_dep_names(alpm_pkg_t *pkg) +static alpm_list_t *get_pkg_deps(alpm_pkg_t *pkg) { - alpm_list_t *i, *names = NULL; + alpm_list_t *i, *deps = NULL; for(i = alpm_pkg_get_depends(pkg); i; i = alpm_list_next(i)) { alpm_depend_t *d = i->data; - names = alpm_list_add(names, d->name); + deps = alpm_list_add(deps, d); } - return names; + return deps; } /** @@ -437,11 +437,17 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r if(rev) { deps = alpm_pkg_compute_requiredby(pkg); } else { - deps = get_pkg_dep_names(pkg); + deps = get_pkg_deps(pkg); } for(i = deps; i; i = alpm_list_next(i)) { - const char *pkgname = i->data; + char *pkgname = NULL; + if(rev) { + pkgname = i->data; + } else { + alpm_depend_t *dep = i->data; + pkgname = alpm_dep_compute_string(dep); + } int last = alpm_list_next(i) ? 0 : 1; alpm_pkg_t *dep_pkg = alpm_find_dbs_satisfier(handle, dblist, pkgname); @@ -475,6 +481,10 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r depth->next = NULL; } } + + if(!rev) { + free(pkgname); + } } if(rev) { -- 2.17.1