diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-08-04 01:33:49 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-08-04 01:33:49 +0000 |
| commit | 78977a1a98d2154e42eab788d6420b3c52464413 (patch) | |
| tree | e9f8399dfda6c59f2b94964ccc2b266074e821e6 /src/libs6rc/s6rc_repo_sync.c | |
| parent | 55131f86090252400176f09e047f17b7110854c8 (diff) | |
| download | s6-rc-78977a1a98d2154e42eab788d6420b3c52464413.tar.gz | |
first draft of s6rc_repo_set_compile
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6rc/s6rc_repo_sync.c')
| -rw-r--r-- | src/libs6rc/s6rc_repo_sync.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/libs6rc/s6rc_repo_sync.c b/src/libs6rc/s6rc_repo_sync.c index 1fb8d65..4341bee 100644 --- a/src/libs6rc/s6rc_repo_sync.c +++ b/src/libs6rc/s6rc_repo_sync.c @@ -24,13 +24,13 @@ static inline void cleanup (char const *fn) errno = e ; } -int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sourceslen, unsigned int verbosity) +int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sourceslen, unsigned int verbosity, char const *fdhuser) { stralloc sa = STRALLOC_ZERO ; size_t repolen = strlen(repo) ; - char newdir[repolen + 24] ; + char newdir[repolen + 29] ; memcpy(newdir, repo, repolen) ; - memcpy(newdir + repolen, "/.everything:cur:XXXXXX", 24) ; + memcpy(newdir + repolen, "/sources/..everything:XXXXXX", 29) ; if (!mkdtemp(newdir)) { strerr_warnfu2sys("mkdtemp ", newdir) ; @@ -56,11 +56,11 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources if (d->d_name[0] == '.') continue ; len = strlen(d->d_name) ; { - char dst[repolen + 25 + len] ; + char dst[repolen + 30 + len] ; char src[srclen + len + 2] ; - memcpy(dst, newdir, repolen + 23) ; - dst[repolen + 23] = '/' ; - memcpy(dst + repolen + 24, d->d_name, len+1) ; + memcpy(dst, newdir, repolen + 28) ; + dst[repolen + 28] = '/' ; + memcpy(dst + repolen + 29, d->d_name, len+1) ; memcpy(src, sources[i], srclen) ; src[srclen] = '/' ; memcpy(src + srclen + 1, d->d_name, len+1) ; @@ -116,17 +116,28 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources } { - char curdir[repolen + 13] ; + char curdir[repolen + 21] ; memcpy(curdir, repo, repolen) ; - memcpy(curdir + repolen, "/.everything", 13) ; - if (!atomic_symlink(newdir + repolen + 1, curdir, "tmp")) goto err ; + memcpy(curdir + repolen, "/sources/.everything", 21) ; + if (!atomic_symlink4(newdir + repolen + 1, curdir, 0, 0)) goto err ; } stralloc_free(&sa) ; - return s6rc_repo_cleanup(repo) ; + if (!s6rc_repo_cleanup(repo)) return 0 ; + + { + size_t buflen = S6RC_REPO_SET_COMPILE_BUFLEN(repolen, sizeof(".everything") - 1) ; + char oldc[buflen] ; + int r = s6rc_repo_set_compile(repo, ".everything", 0, 0, oldc, verbosity, fdhuser) ; + if (r <= 0) goto err0 ; + if (r == 2) rm_rf(oldc) ; + } + + return 1 ; err: stralloc_free(&sa) ; + err0: cleanup(newdir) ; return 0 ; } |
