diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-08-08 00:28:58 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-08-08 00:28:58 +0000 |
| commit | a92aa0997e0d367e396b02dc2d55d0c0a3cbbc38 (patch) | |
| tree | e6f21d97cfa6cfea8bab222d1b99510ea5c8ee35 /src/libs6rc/s6rc_repo_compile.c | |
| parent | f513ab225005661e9b4674a1b333abea0c6670f0 (diff) | |
| download | s6-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.c | 28 |
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) ; |
