diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-17 01:14:02 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-17 01:14:02 -0400 |
commit | 1b0fa1a995136b3925741423389eb7630eea9078 (patch) | |
tree | 45400973fe83e24b3f94cf890b3c1867a281aa26 /src | |
parent | c51c410d72e6cc6fe5a23df3e89f3bc07dfa15ae (diff) | |
download | spmc-1b0fa1a995136b3925741423389eb7630eea9078.tar.gz |
Fix up reading dependencies from packages
* Add resolve_free()
Diffstat (limited to 'src')
-rw-r--r-- | src/resolve.c | 25 |
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 |