aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/repo/s6-rc-repo-init.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/repo/s6-rc-repo-init.c b/src/repo/s6-rc-repo-init.c
index c190bee..c63637b 100644
--- a/src/repo/s6-rc-repo-init.c
+++ b/src/repo/s6-rc-repo-init.c
@@ -149,7 +149,10 @@ int main (int argc, char const *const *argv)
}
if (chmod(repotmp, 02755) == -1)
+ {
+ cleanup(repotmp) ;
strerr_diefu2sys(111, "chmod ", repotmp) ;
+ }
if (rename(repotmp, wgola[GOLA_REPODIR]) == -1)
{
@@ -185,13 +188,20 @@ int main (int argc, char const *const *argv)
lockfd = s6rc_repo_lock(wgola[GOLA_REPODIR], 1) ;
if (lockfd == -1)
+ {
+ if (!(wgolb & GOLB_UPDATE)) cleanup(wgola[GOLA_REPODIR]) ;
strerr_diefu2sys(111, "lock ", wgola[GOLA_REPODIR]) ;
+ }
char sold[repolen + 16] ;
memcpy(sold, wgola[GOLA_REPODIR], repolen) ;
sold[repolen] = '/' ;
- if (!s6rc_repo_makestores(wgola[GOLA_REPODIR], argv, argc, sold + repolen + 1)) _exit(111) ;
+ if (!s6rc_repo_makestores(wgola[GOLA_REPODIR], argv, argc, sold + repolen + 1))
+ {
+ if (!(wgolb & GOLB_UPDATE)) cleanup(wgola[GOLA_REPODIR]) ;
+ _exit(111) ;
+ }
if (!(wgolb & GOLB_BARE))
{