summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/deps.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index cd20dd5c..67cfb0f9 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -443,25 +443,38 @@ alpm_list_t *_alpm_checkdeps(pmdb_t *db, pmtranstype_t op,
return(baddeps);
}
+static int _alpm_dep_vercmp(const char *version1, pmdepmod_t mod,
+ const char *version2)
+{
+ int equal = 0;
+
+ if(mod == PM_DEP_MOD_ANY) {
+ equal = 1;
+ } else {
+ int cmp = _alpm_versioncmp(version1, version2);
+ switch(mod) {
+ case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
+ case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
+ case PM_DEP_MOD_LE: equal = (cmp <= 0); break;
+ default: equal = 1; break;
+ }
+ }
+ return(equal);
+}
+
int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
{
int equal = 0;
ALPM_LOG_FUNC;
- if(strcmp(pkg->name, dep->name) == 0
- || alpm_list_find_str(alpm_pkg_get_provides(pkg), dep->name)) {
- if(dep->mod == PM_DEP_MOD_ANY) {
- equal = 1;
- } else {
- int cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), dep->version);
- switch(dep->mod) {
- case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
- case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
- case PM_DEP_MOD_LE: equal = (cmp <= 0); break;
- default: equal = 1; break;
- }
- }
+ const char *pkgname = alpm_pkg_get_name(pkg);
+ const char *pkgversion = alpm_pkg_get_version(pkg);
+
+ if(strcmp(pkgname, dep->name) == 0
+ || alpm_list_find_str(alpm_pkg_get_provides(pkg), dep->name)) {
+
+ equal = _alpm_dep_vercmp(pkgversion, dep->mod, dep->version);
char *mod = "~=";
switch(dep->mod) {
@@ -473,16 +486,16 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
if(strlen(dep->version) > 0) {
_alpm_log(PM_LOG_DEBUG, "depcmp: %s-%s %s %s-%s => %s",
- alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg),
+ pkgname, pkgversion,
mod, dep->name, dep->version, (equal ? "match" : "no match"));
} else {
_alpm_log(PM_LOG_DEBUG, "depcmp: %s-%s %s %s => %s",
- alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg),
+ pkgname, pkgversion,
mod, dep->name, (equal ? "match" : "no match"));
}
}
- return equal;
+ return(equal);
}
pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)