mirror of
https://github.com/moparisthebest/pacman
synced 2025-01-10 13:28:12 -05:00
libalpm/package.c : fix requiredby with multiple providers.
The code didn't match the following comment : "A depends on B through n depends <=> A listed in B's requiredby n times" It stopped at n=1 with a break. I was surprised to see this case happens in real, that's how I noticed the bug: wine depends on both freeglut and glut, while freeglut provides glut. So when installing wine, the update_depends function listed wine twice in freeglut's requiredby. But the compute_requiredby function (used when installing freeglut, and used by testdb) listed wine only once in freeglut's requiredby. That made testdb unhappy. Signed-off-by: Chantry Xavier <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
619bf56e66
commit
0ff02995f1
@ -527,7 +527,6 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
|
|||||||
|
|
||||||
for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) {
|
for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) {
|
||||||
pmdepend_t *dep;
|
pmdepend_t *dep;
|
||||||
int satisfies;
|
|
||||||
|
|
||||||
if(!j->data) {
|
if(!j->data) {
|
||||||
continue;
|
continue;
|
||||||
@ -537,14 +536,12 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
satisfies = alpm_depcmp(pkg, dep);
|
if(alpm_depcmp(pkg, dep)) {
|
||||||
FREE(dep);
|
|
||||||
if(satisfies) {
|
|
||||||
_alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'\n",
|
_alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'\n",
|
||||||
cachepkgname, pkg->name);
|
cachepkgname, pkg->name);
|
||||||
reqs = alpm_list_add(reqs, strdup(cachepkgname));
|
reqs = alpm_list_add(reqs, strdup(cachepkgname));
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
FREE(dep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(reqs);
|
return(reqs);
|
||||||
|
Loading…
Reference in New Issue
Block a user