diff options
-rw-r--r-- | lib/libalpm/deps.c | 21 | ||||
-rw-r--r-- | lib/libalpm/deps.h | 1 |
2 files changed, 15 insertions, 7 deletions
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index c5acfc95..7daa28d3 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -416,17 +416,18 @@ int _alpm_depcmp_literal(alpm_pkg_t *pkg, alpm_depend_t *dep) return dep_vercmp(pkg->version, dep->mod, dep->version); } -int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep) +/** + * @param dep dependency to check agains the provision list + * @param provisions provision list + * @return 1 if provider is found, 0 otherwise + */ +int _alpm_depcmp_provides(alpm_depend_t *dep, alpm_list_t *provisions) { + int satisfy = 0; alpm_list_t *i; - int satisfy = _alpm_depcmp_literal(pkg, dep); - - if(satisfy) { - return satisfy; - } /* check provisions, name and version if available */ - for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) { + for(i = provisions; i && !satisfy; i = i->next) { alpm_depend_t *provision = i->data; if(dep->mod == ALPM_DEP_MOD_ANY) { @@ -444,6 +445,12 @@ int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep) return satisfy; } +int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep) +{ + return _alpm_depcmp_literal(pkg, dep) + || _alpm_depcmp_provides(dep, alpm_pkg_get_provides(pkg)); +} + alpm_depend_t *_alpm_splitdep(const char *depstring) { alpm_depend_t *depend; diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h index e36bbb38..f4eadba1 100644 --- a/lib/libalpm/deps.h +++ b/lib/libalpm/deps.h @@ -37,6 +37,7 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, alpm_pkg_t alpm_list_t **data); alpm_depend_t *_alpm_splitdep(const char *depstring); int _alpm_depcmp_literal(alpm_pkg_t *pkg, alpm_depend_t *dep); +int _alpm_depcmp_provides(alpm_depend_t *dep, alpm_list_t *provisions); int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep); #endif /* _ALPM_DEPS_H */ |