diff options
Diffstat (limited to 'src/libs6rc/s6rc_repo_badsub.c')
| -rw-r--r-- | src/libs6rc/s6rc_repo_badsub.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libs6rc/s6rc_repo_badsub.c b/src/libs6rc/s6rc_repo_badsub.c index fc2a6ba..69697eb 100644 --- a/src/libs6rc/s6rc_repo_badsub.c +++ b/src/libs6rc/s6rc_repo_badsub.c @@ -18,7 +18,7 @@ static int strqcmp (void const *a, void const *b) return strcmp(*(char const *const *)a, *(char const *const *)b) ; } -int s6rc_repo_badsub (char const *repo, char const *set, char const **services, uint32_t n, uint8_t newsub, s6rc_repo_sv const *svlist, uint32_t ntot, stralloc *sa, genalloc *badga) +int s6rc_repo_badsub (char const *repo, char const *set, char const **services, uint32_t n, uint8_t newsub, uint8_t what, s6rc_repo_sv const *svlist, uint32_t ntot, stralloc *sa, genalloc *badga) { int sawasnull = !!sa->s ; int gawasnull = !!genalloc_s(uint32_t, badga) ; @@ -29,9 +29,9 @@ int s6rc_repo_badsub (char const *repo, char const *set, char const **services, size_t const *ind ; uint32_t mid ; - if (newsub < 3 && s6rc_repo_listalldeps(repo, services, n, sa, &fulldeps, 0)) return 0 ; + if (newsub < 3 && (what & 1) && s6rc_repo_listalldeps(repo, services, n, sa, &fulldeps, 0)) return 0 ; mid = genalloc_len(size_t, &fulldeps) ; - if (newsub > 0 && s6rc_repo_listalldeps(repo, services, n, sa, &fulldeps, 1)) goto err ; + if (newsub > 0 && (what & 2) && s6rc_repo_listalldeps(repo, services, n, sa, &fulldeps, 1)) goto err ; qsort(services, n, sizeof(char const *), &strqcmp) ; fulln = genalloc_len(size_t, &fulldeps) ; @@ -62,6 +62,7 @@ int s6rc_repo_badsub (char const *repo, char const *set, char const **services, return 1 ; err: + genalloc_free(size_t, &fulldeps) ; if (sawasnull) stralloc_free(sa) ; else sa->len = sabase ; if (gawasnull) genalloc_free(uint32_t, badga) ; else genalloc_setlen(uint32_t, badga, gabase) ; return 0 ; |
