diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-09-21 12:36:52 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-09-21 12:36:52 +0000 |
| commit | 0efd4cf8041f107a4460cfefa16667ee012e85d3 (patch) | |
| tree | 0d91a24a3965d4739d2a89779506b91c63ebe744 /src/repo/s6-rc-repo-init.c | |
| parent | 8671af033b2f5512e9138cbadcfc068b3ae3e135 (diff) | |
| download | s6-rc-0efd4cf8041f107a4460cfefa16667ee012e85d3.tar.gz | |
Add s6-rc-set-commit, slightly rephrase other binaries
Diffstat (limited to 'src/repo/s6-rc-repo-init.c')
| -rw-r--r-- | src/repo/s6-rc-repo-init.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/repo/s6-rc-repo-init.c b/src/repo/s6-rc-repo-init.c index 06ba632..971a00e 100644 --- a/src/repo/s6-rc-repo-init.c +++ b/src/repo/s6-rc-repo-init.c @@ -33,13 +33,12 @@ static void cleanup (char const *fn) enum golb_e { - GOLB_FORCE, - GOLB_N + GOLB_FORCE = 0x01 } ; -static gol_bool const rgolb[1] = +static gol_bool const rgolb[] = { - { .so = 'f', .lo = "force", .clear = 0, .set = 1 << GOLB_FORCE } + { .so = 'f', .lo = "force", .clear = 0, .set = GOLB_FORCE } } ; enum gola_e @@ -50,38 +49,38 @@ enum gola_e GOLA_N } ; -static gol_arg const rgola[3] = +static gol_arg const rgola[] = { { .so = 'v', .lo = "verbosity", .i = GOLA_VERBOSITY }, { .so = 'r', .lo = "repodir", .i = GOLA_REPODIR }, - { .so = 'h', .lo = "fdhuser", .i = GOLA_FDHUSER } + { .so = 'h', .lo = "fd-holder-user", .i = GOLA_FDHUSER } } ; int main (int argc, char const *const *argv) { size_t repolen ; - char const *repo = S6RC_REPO_BASE ; unsigned int verbosity = 1 ; mode_t m ; - char const *wgola[3] = { 0 } ; + char const *wgola[GOLA_N] = { 0 } ; uint64_t wgolb = 0 ; unsigned int golc ; PROG = "s6-rc-repo-init" ; - golc = gol_main(argc, argv, rgolb, 1, rgola, 3, &wgolb, wgola) ; + wgola[GOLA_REPODIR] = S6RC_REPO_BASE ; + + golc = GOL_main(argc, argv, rgolb, rgola, &wgolb, wgola) ; argc -= golc ; argv += golc ; if (wgola[GOLA_VERBOSITY] && !uint0_scan(wgola[GOLA_VERBOSITY], &verbosity)) strerr_dief1x(100, "verbosity needs to be an unsigned integer") ; - if (wgola[GOLA_REPODIR]) repo = wgola[GOLA_REPODIR] ; for (unsigned int i = 0 ; i < argc ; i++) if (argv[i][0] != '/') strerr_dief2x(100, argv[i], " is not an absolute path") ; if (!argc) strerr_warnw1x("no source directories given, creating an empty repository") ; tain_now_g() ; - repolen = strlen(repo) ; + repolen = strlen(wgola[GOLA_REPODIR]) ; char repotmp[repolen + 12] ; char tmp[repolen + 21] ; - memcpy(repotmp, repo, repolen) ; + memcpy(repotmp, wgola[GOLA_REPODIR], repolen) ; memcpy(repotmp + repolen, "-tmp.XXXXXX", 12) ; m = umask(0) ; if (!mkdtemp(repotmp)) @@ -132,32 +131,32 @@ int main (int argc, char const *const *argv) if (chmod(repotmp, 02755) == -1) strerr_diefu2sys(111, "chmod ", repotmp) ; - if (rename(repotmp, repo) == -1) + if (rename(repotmp, wgola[GOLA_REPODIR]) == -1) { - if (errno != EEXIST || !(wgolb & 1 << GOLB_FORCE)) + if (errno != EEXIST || !(wgolb & GOLB_FORCE)) { cleanup(repotmp) ; - strerr_diefu4sys(111, "rename ", repotmp, " to ", repo) ; + strerr_diefu4sys(111, "rename ", repotmp, " to ", wgola[GOLA_REPODIR]) ; } else { - memcpy(tmp, repo, repolen) ; + memcpy(tmp, wgola[GOLA_REPODIR], repolen) ; memcpy(tmp + repolen, ":old:", 5) ; random_name(tmp + repolen + 5, 15) ; tmp[repolen + 20] = 0 ; - if (rename(repo, tmp) == -1) + if (rename(wgola[GOLA_REPODIR], tmp) == -1) { cleanup(repotmp) ; - strerr_diefu4sys(111, "rename ", repo, " to ", tmp) ; + strerr_diefu4sys(111, "rename ", wgola[GOLA_REPODIR], " to ", tmp) ; } - if (rename(repotmp, repo) == -1) + if (rename(repotmp, wgola[GOLA_REPODIR]) == -1) { int e = errno ; - if (rename(tmp, repo) == -1) - strerr_diefu7sys(111, "rename directories to ", repo, ": weird race happened. New repository is at ", repotmp, " and old repository is at ", tmp, " - reported error was") ; + if (rename(tmp, wgola[GOLA_REPODIR]) == -1) + strerr_diefu7sys(111, "rename directories to ", wgola[GOLA_REPODIR], ": weird race happened. New repository is at ", repotmp, " and old repository is at ", tmp, " - reported error was") ; errno = e ; cleanup(repotmp) ; - strerr_diefu4sys(111, "rename ", repotmp, " to ", repo) ; + strerr_diefu4sys(111, "rename ", repotmp, " to ", wgola[GOLA_REPODIR]) ; } } } |
