diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-06-30 22:20:08 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-06-30 22:20:08 +0000 |
| commit | 85554b3c1103c226fb16d20402ccea1dbc08f8c2 (patch) | |
| tree | dcb64b2e18d52a19fbdd985ca8de79e6d36c16ab /src/repo/s6-rc-repo-populate.c | |
| parent | 4fca7a92b9eeaba9c327ca8b257b224c5c03e79b (diff) | |
| download | s6-rc-85554b3c1103c226fb16d20402ccea1dbc08f8c2.tar.gz | |
Add s6-rc-repo-init, s6-rc-repo-populate
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/repo/s6-rc-repo-populate.c')
| -rw-r--r-- | src/repo/s6-rc-repo-populate.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/repo/s6-rc-repo-populate.c b/src/repo/s6-rc-repo-populate.c new file mode 100644 index 0000000..7733a56 --- /dev/null +++ b/src/repo/s6-rc-repo-populate.c @@ -0,0 +1,72 @@ +/* ISC license. */ + +#include <skalibs/bsdsnowflake.h> /* stat */ + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> /* rename */ +#include <errno.h> + +#include <skalibs/stat.h> +#include <skalibs/uint64.h> +#include <skalibs/posixplz.h> +#include <skalibs/gol.h> +#include <skalibs/prog.h> +#include <skalibs/strerr.h> +#include <skalibs/djbunix.h> + +#include <s6-rc/config.h> +#include <s6-rc/s6rc.h> + +#define USAGE "s6-rc-repo-populate [ -r repo ] sourcedirs..." +#define dieusage() strerr_dieusage(100, USAGE) + +static void cleanup (char const *fn) +{ + int e = errno ; + rm_rf(fn) ; + errno = e ; +} + +enum golb_e +{ + GOLB_FORCE, + GOLB_N +} ; + +static gol_bool const rgolb[1] = +{ + { .so = 'f', .lo = "force", .clear = 0, .set = 1 << GOLB_FORCE } +} ; + +static gol_arg const rgola[1] = +{ + { .so = 'r', .lo = "repodir", .i = 0 } +} ; + +int main (int argc, char const *const *argv) +{ + size_t repolen ; + char const *repo = S6RC_REPO_BASE ; + uint64_t wgolb = 0 ; + unsigned int golc ; + + PROG = "s6-rc-repo-populate" ; + golc = gol_main(argc, argv, rgolb, 1, rgola, 1, &wgolb, &repo) ; + argc -= golc ; argv += golc ; + if (!argc) dieusage() ; + if (repo[0] != '/') + strerr_dief2x(100, repo, " is not an absolute path") ; + + repolen = strlen(repo) ; + char sub[repolen + 30] ; + memcpy(sub, repo, repolen) ; + if (!(wgolb & 1 << GOLB_FORCE)) + { + struct stat st ; + + } + memcpy(sub + repolen, "/.everything-tmp.XXXXXX", 12) ; + + return 0 ; +} |
