diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-10-15 05:17:26 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-10-15 05:17:26 +0000 |
| commit | 91a0655557e707977f583b2142bda898ee599fd8 (patch) | |
| tree | b5dd235420095136c99893bfb91618fed79a9918 /src/repo/s6rc_repo_compile.c | |
| parent | 1feee8fff883b4e767a79e9373a96591d46eb8a2 (diff) | |
| download | s6-rc-91a0655557e707977f583b2142bda898ee599fd8.tar.gz | |
Second part of the format-upgrade support: ensure snapshots are there
We don't want to install compiled dbs without having a snapshot of
their source set, so whenever we test that the compiled db is up to
date, we also test that a snapshot is present. This is important
because we will auto-cleanup unused snapshots after installation.
Diffstat (limited to 'src/repo/s6rc_repo_compile.c')
| -rw-r--r-- | src/repo/s6rc_repo_compile.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/repo/s6rc_repo_compile.c b/src/repo/s6rc_repo_compile.c index bfb7639..f89a65a 100644 --- a/src/repo/s6rc_repo_compile.c +++ b/src/repo/s6rc_repo_compile.c @@ -22,7 +22,7 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs size_t setlen = strlen(set) ; size_t totrxlen = 0 ; int needprefix = strcmp(set, ".ref") ; - char snap[repolen + setlen + 37] ; + char snap[setlen + 44] ; char newc[repolen + setlen + 45] ; memcpy(newc, repo, repolen) ; memcpy(newc + repolen, "/compiled/.", 11) ; @@ -99,18 +99,19 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs if (needprefix) { int e ; - memcpy(snap, ".snapshot:", 10) ; - memcpy(snap + 10, newc + repolen + 11, setlen + 26) ; - snap[repolen + setlen + 36] = 0 ; + memcpy(snap, ".snapshot", 9) ; + memcpy(snap + 9, newc + repolen + 10, setlen + 35) ; e = s6rc_repo_setcopy(repo, set, snap, 1) ; switch (e) { case -2 : strerr_warnf("internal layout error while taking a snapshot of set ", set) ; + rm_rf(newc) ; return (errno = EILSEQ, -1) ; case 0 : break ; default : strerr_warnfusys("take a snapshot of set ", set) ; + rm_rf(newc) ; return (errno = e, -1) ; } } @@ -123,7 +124,7 @@ int s6rc_repo_compile (char const *repo, char const *set, char const *const *rxs { int e = errno ; rm_rf(newc) ; - s6rc_repo_setdelete(repo, snap) ; + if (needprefix) s6rc_repo_setdelete(repo, snap) ; errno = e ; strerr_warnfu4sys("atomically symlink ", newc + repolen + 10, " to ", fn) ; return -1 ; |
