aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2020-03-17 01:14:02 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2020-03-17 01:14:02 -0400
commit1b0fa1a995136b3925741423389eb7630eea9078 (patch)
tree45400973fe83e24b3f94cf890b3c1867a281aa26 /src
parentc51c410d72e6cc6fe5a23df3e89f3bc07dfa15ae (diff)
downloadspmc-1b0fa1a995136b3925741423389eb7630eea9078.tar.gz
Fix up reading dependencies from packages
* Add resolve_free()
Diffstat (limited to 'src')
-rw-r--r--src/resolve.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/resolve.c b/src/resolve.c
index 214f02a..db86867 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -6,6 +6,13 @@
static ManifestPackage *requirements[SPM_REQUIREMENT_MAX] = {0, };
+void resolve_free() {
+ for (size_t i = 0; i < SPM_REQUIREMENT_MAX; i++) {
+ if (requirements[i] != NULL)
+ manifest_package_free(requirements[i]);
+ }
+}
+
/**
* Scan global `requirements` array for `archive`
* @param archive
@@ -27,8 +34,10 @@ int resolve_has_dependency(const char *archive) {
* @return success = array of `ManifestPackage`, not found = NULL
*/
ManifestPackage **resolve_dependencies(ManifestList *manifests, const char *spec) {
+ static size_t req_i = 0;
ManifestPackage *package = manifestlist_search(manifests, spec);
ManifestPackage *requirement = NULL;
+
if (package == NULL) {
return requirements;
}
@@ -41,11 +50,19 @@ ManifestPackage **resolve_dependencies(ManifestList *manifests, const char *spec
}
if (resolve_has_dependency(requirement->archive)) {
free(requirement);
- continue;
+ } else {
+ resolve_dependencies(manifests, requirement->archive);
+ requirements[req_i] = requirement;
+ req_i++;
}
- resolve_dependencies(manifests, requirement->archive);
- requirements[i] = requirement;
}
- free(package);
+
+ if (!resolve_has_dependency(package->archive)) {
+ requirements[req_i] = package;
+#ifdef _DEBUG
+ printf("%s: requirements[%zu] = '%s'\n", __FUNCTION__, req_i, requirements[req_i]->archive);
+#endif
+ }
+ //free(package);
return requirements;
} \ No newline at end of file