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 <bluewind@xinu.at>
This commit is contained in:
Florian Pritz 2014-08-06 11:36:51 +02:00 committed by Allan McRae
parent b275e5184e
commit 13c9745302
2 changed files with 15 additions and 7 deletions

View file

@ -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); 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; alpm_list_t *i;
int satisfy = _alpm_depcmp_literal(pkg, dep);
if(satisfy) {
return satisfy;
}
/* check provisions, name and version if available */ /* 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; alpm_depend_t *provision = i->data;
if(dep->mod == ALPM_DEP_MOD_ANY) { if(dep->mod == ALPM_DEP_MOD_ANY) {
@ -444,6 +445,12 @@ int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep)
return satisfy; 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 *_alpm_splitdep(const char *depstring)
{ {
alpm_depend_t *depend; alpm_depend_t *depend;

View file

@ -37,6 +37,7 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, alpm_pkg_t
alpm_list_t **data); alpm_list_t **data);
alpm_depend_t *_alpm_splitdep(const char *depstring); alpm_depend_t *_alpm_splitdep(const char *depstring);
int _alpm_depcmp_literal(alpm_pkg_t *pkg, alpm_depend_t *dep); 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); int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep);
#endif /* _ALPM_DEPS_H */ #endif /* _ALPM_DEPS_H */