diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-05 00:05:59 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-05 00:05:59 +0000 |
| commit | 399184cad0c0dd63a39de775130a2a73d0325913 (patch) | |
| tree | 978b8c5dc3f494a9627f601bf8728bf6e8324b57 /src/libs6rc/s6rc_repo_makestores.c | |
| parent | 92ef99d90574ebd4732c10a0a127945a40271c87 (diff) | |
| download | s6-rc-399184cad0c0dd63a39de775130a2a73d0325913.tar.gz | |
Do not delete old store before the sync succeeds
Diffstat (limited to 'src/libs6rc/s6rc_repo_makestores.c')
| -rw-r--r-- | src/libs6rc/s6rc_repo_makestores.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/libs6rc/s6rc_repo_makestores.c b/src/libs6rc/s6rc_repo_makestores.c index 5568ec5..f61f94c 100644 --- a/src/libs6rc/s6rc_repo_makestores.c +++ b/src/libs6rc/s6rc_repo_makestores.c @@ -15,19 +15,17 @@ #include <s6-rc/repo.h> -int s6rc_repo_makestores (char const *repo, char const *const *stores, uint16_t n) +int s6rc_repo_makestores (char const *repo, char const *const *stores, uint16_t n, char *sold) { size_t repolen = strlen(repo) ; mode_t m = umask(0) ; char slink[repolen + 8] ; char sdir[repolen + 21] ; - char sold[repolen + 16] ; memcpy(slink, repo, repolen) ; memcpy(slink + repolen, "/stores", 8) ; memcpy(sdir, slink, repolen + 1) ; memcpy(sdir + repolen + 1, ".stores:XXXXXX", 15) ; - memcpy(sold, slink, repolen + 1) ; if (!mkdtemp(sdir)) { @@ -54,12 +52,11 @@ int s6rc_repo_makestores (char const *repo, char const *const *stores, uint16_t strerr_warnfu2sys("chmod ", sdir) ; goto err ; } - if (!atomic_symlink4(sdir + repolen + 1, slink, sold + repolen + 1, 15)) + if (!atomic_symlink4(sdir + repolen + 1, slink, sold, 15)) { strerr_warnfu4sys("atomically symlink ", sdir + repolen + 1, " to ", slink) ; goto err ; } - rm_rf(sold) ; return 1 ; err: |
