aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_repo_makestores.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-10-05 00:05:59 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2025-10-05 00:05:59 +0000
commit399184cad0c0dd63a39de775130a2a73d0325913 (patch)
tree978b8c5dc3f494a9627f601bf8728bf6e8324b57 /src/libs6rc/s6rc_repo_makestores.c
parent92ef99d90574ebd4732c10a0a127945a40271c87 (diff)
downloads6-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.c7
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: