aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_repo_badsub.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6rc/s6rc_repo_badsub.c')
-rw-r--r--src/libs6rc/s6rc_repo_badsub.c7
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 ;