From 13c9745302b11dcee7b1b894d95789a2caf11c9d Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Wed, 6 Aug 2014 11:36:51 +0200 Subject: deps.c: split _alpm_depcmp into _alpm_depcmp_provides This allows to reuse the provision checker for a simple list of provisions without a package. Signed-off-by: Florian Pritz --- lib/libalpm/deps.c | 21 ++++++++++++++------- lib/libalpm/deps.h | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) (limited to 'lib/libalpm') 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 */ -- cgit v1.2.3-70-g09d2