[pacman-dev] [PATCH v2 1/2] deps.c: split _alpm_depcmp into _alpm_depcmp_provides

Florian Pritz bluewind at xinu.at
Wed Aug 6 15:55:31 EDT 2014


This allows to reuse the provision checker for a simple list of
provisions without a package.

Signed-off-by: Florian Pritz <bluewind at xinu.at>
---
 lib/libalpm/deps.c | 27 +++++++++++++++++++--------
 lib/libalpm/deps.h |  1 +
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 1cbbc5f..5c76da7 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -421,17 +421,17 @@ 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)
 {
-	alpm_list_t *i;
-	int satisfy = _alpm_depcmp_literal(pkg, dep);
-
-	if(satisfy) {
-		return satisfy;
-	}
+	int satisfy = 0;
 
 	/* check provisions, name and version if available */
-	for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) {
+	for(alpm_list_t *i = provisions; i && !satisfy; i = i->next) {
 		alpm_depend_t *provision = i->data;
 
 		if(dep->mod == ALPM_DEP_MOD_ANY) {
@@ -449,6 +449,17 @@ int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep)
 	return satisfy;
 }
 
+int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep)
+{
+	int satisfy = _alpm_depcmp_literal(pkg, dep);
+
+	if(satisfy) {
+		return satisfy;
+	}
+
+	return _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 e36bbb3..f4eadba 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 */
-- 
2.0.4


More information about the pacman-dev mailing list