aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_repo_compile.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-08-08 00:28:58 +0000
committerLaurent Bercot <ska@appnovation.com>2025-08-08 00:28:58 +0000
commita92aa0997e0d367e396b02dc2d55d0c0a3cbbc38 (patch)
treee6f21d97cfa6cfea8bab222d1b99510ea5c8ee35 /src/libs6rc/s6rc_repo_compile.c
parentf513ab225005661e9b4674a1b333abea0c6670f0 (diff)
downloads6-rc-a92aa0997e0d367e396b02dc2d55d0c0a3cbbc38.tar.gz
Major refactors, add makesetbundle, refcompile/setcompile, etc.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6rc/s6rc_repo_compile.c')
-rw-r--r--src/libs6rc/s6rc_repo_compile.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/libs6rc/s6rc_repo_compile.c b/src/libs6rc/s6rc_repo_compile.c
index db41f89..390219a 100644
--- a/src/libs6rc/s6rc_repo_compile.c
+++ b/src/libs6rc/s6rc_repo_compile.c
@@ -21,7 +21,8 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *sub
size_t repolen = strlen(repo) ;
size_t setlen = strlen(set) ;
size_t totsublen = 0 ;
- char newc[S6RC_REPO_COMPILE_BUFLEN(repolen, setlen)] ;
+ int needprefix = strcmp(set, ".ref") ;
+ char newc[repolen + setlen + 45] ;
memcpy(newc, repo, repolen) ;
memcpy(newc + repolen, "/compiled/.", 11) ;
memcpy(newc + repolen + 11, set, setlen) ;
@@ -36,9 +37,9 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *sub
pid_t pid ;
size_t m = 0 ;
int wstat ;
- char const *argv[9 + nsubs + !nsubs] ;
+ char const *argv[9 + nsubs] ;
char fmtv[UINT_FMT] ;
- char src[(nsubs + !nsubs) * (repolen + 10 + setlen) + totsublen] ;
+ char src[nsubs * (repolen + 10 + (needprefix ? setlen + 1 : 0)) + totsublen] ;
char *w = src ;
fmtv[uint_fmt(fmtv, verbosity)] = 0 ;
argv[m++] = S6RC_BINPREFIX "s6-rc-compile" ;
@@ -52,25 +53,18 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *sub
}
argv[m++] = "--" ;
argv[m++] = newc ;
- if (nsubs)
+ for (size_t i = 0 ; i < nsubs ; i++)
{
- for (size_t i = 0 ; i < nsubs ; i++)
+ size_t sublen = strlen(subs[i]) ;
+ argv[m++] = w ;
+ memcpy(w, repo, repolen) ; w += repolen ;
+ memcpy(w, "/sources/", 9) ; w += 9 ;
+ if (needprefix)
{
- size_t sublen = strlen(subs[i]) ;
- argv[m++] = w ;
- memcpy(w, repo, repolen) ; w += repolen ;
- memcpy(w, "/sources/", 9) ; w += 9 ;
memcpy(w, set, setlen) ; w += setlen ;
*w++ = '/' ;
- memcpy(w, subs[i], sublen+1) ; w += sublen + 1 ;
}
- }
- else
- {
- argv[m++] = w ;
- memcpy(w, repo, repolen) ; w += repolen ;
- memcpy(w, "/sources/", 9) ; w += 9 ;
- memcpy(w, set, setlen+1) ; w += setlen+1 ;
+ memcpy(w, subs[i], sublen+1) ; w += sublen + 1 ;
}
argv[m++] = 0 ;
pid = cspawn(argv[0], argv, (char const *const *)environ, 0, 0, 0) ;