[pacman-dev] [patch] Please use alpm_depcmp! (part 1)
Nagy Gabor
ngaba at petra.hos.u-szeged.hu
Tue Apr 10 17:40:07 EDT 2007
Hi!
To be continued... ;-)
-----------------------
diff -Naur pacman-lib/lib/libalpm/package.c pacman-lib.new/lib/libalpm/package.c
--- pacman-lib/lib/libalpm/package.c 2007-03-12 05:47:58.000000000 +0100
+++ pacman-lib.new/lib/libalpm/package.c 2007-04-10 23:33:57.000000000 +0200
@@ -536,11 +536,12 @@
return(0);
}
-
+/* This function scans the whole local db to fill in the
+ 'requiredby' field of a package
+ (this is useful if we want to install this package) */
void _alpm_pkg_update_requiredby(pmpkg_t *pkg)
{
- alpm_list_t *i, *j, *k;
- const char *pkgname = alpm_pkg_get_name(pkg);
+ alpm_list_t *i, *j;
pmdb_t *localdb = alpm_option_get_localdb();
for(i = _alpm_db_get_pkgcache(localdb); i; i = i->next) {
@@ -555,38 +556,20 @@
if(!j->data) {
continue;
}
- dep = alpm_splitdep(j->data);
- if(dep == NULL) {
- continue;
- }
-
- /* check the actual package itself */
- if(strcmp(dep->name, pkgname) == 0) {
+ dep = alpm_splitdep(j->data);
+ if(dep == NULL) {
+ continue;
+ }
+ int satisfies = alpm_depcmp(pkg, dep);
+ free(dep);
+ if(satisfies) {
alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg);
-
- if(!alpm_list_find_str(reqs, cachepkgname)) {
- _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"),
- cachepkgname, pkg->name);
- reqs = alpm_list_add(reqs, strdup(cachepkgname));
- pkg->requiredby = reqs;
- }
+ _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"),
+ cachepkgname, pkg->name);
+ reqs = alpm_list_add(reqs, strdup(cachepkgname));
+ pkg->requiredby = reqs;
+ break; // we add an entry only once
}
-
- /* check for provisions as well */
- for(k = alpm_pkg_get_provides(pkg); k; k = k->next) {
- const char *provname = k->data;
- if(strcmp(dep->name, provname) == 0) {
- alpm_list_t *reqs = alpm_pkg_get_requiredby(pkg);
-
- if(!alpm_list_find_str(reqs, cachepkgname)) {
- _alpm_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s' (provides: %s)"),
- cachepkgname, pkgname, provname);
- reqs = alpm_list_add(reqs, strdup(cachepkgname));
- pkg->requiredby = reqs;
- }
- }
- }
- free(dep);
}
}
}
------------------------
Bye, Nagy Gabor
More information about the pacman-dev
mailing list