diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/s6/s6-internal.h | 8 | ||||
| -rw-r--r-- | src/s6/s6.c | 9 | ||||
| -rw-r--r-- | src/s6/service_start.c | 24 |
3 files changed, 35 insertions, 6 deletions
diff --git a/src/s6/s6-internal.h b/src/s6/s6-internal.h index e269380..6616c87 100644 --- a/src/s6/s6-internal.h +++ b/src/s6/s6-internal.h @@ -54,12 +54,18 @@ struct global_s { unsigned int verbosity ; char const *scandir ; + char const *livedir ; + char const *repodir ; + uint8_t istty : 1 ; uint8_t color : 1 ; } ; #define GLOBAL_ZERO \ { \ .verbosity = 1, \ - .scandir = "/run/service", \ + .scandir = S6_FRONTEND_SCANDIR, \ + .livedir = S6_FRONTEND_LIVEDIR, \ + .repodir = S6_FRONTEND_REPODIR, \ + .istty = 0, \ .color = 0 \ } diff --git a/src/s6/s6.c b/src/s6/s6.c index 6a28448..9b6b88a 100644 --- a/src/s6/s6.c +++ b/src/s6/s6.c @@ -90,12 +90,13 @@ int main (int argc, char const *const *argv, char const *const *envp) if (golb & (1 << MAIN_GOLB_HELP)) help(argv) ; if (golb & ((1 << MAIN_GOLB_VERSION) | (1 << MAIN_GOLB_HELP))) return 0 ; - if (gola[MAIN_GOLA_SCANDIR]) strerr_warni("scandir is ", gola[MAIN_GOLA_SCANDIR]) ; - if (gola[MAIN_GOLA_LIVEDIR]) strerr_warni("livedir is ", gola[MAIN_GOLA_LIVEDIR]) ; - if (gola[MAIN_GOLA_REPODIR]) strerr_warni("repodir is ", gola[MAIN_GOLA_REPODIR]) ; + if (gola[MAIN_GOLA_SCANDIR]) g->scandir = gola[MAIN_GOLA_SCANDIR] ; + if (gola[MAIN_GOLA_LIVEDIR]) g->livedir = gola[MAIN_GOLA_LIVEDIR] ; + if (gola[MAIN_GOLA_REPODIR]) g->repodir = gola[MAIN_GOLA_REPODIR] ; { int force_color = 0 ; + g->istty = isatty(1) ; if (gola[MAIN_GOLA_COLOR]) { if (!strcmp(gola[MAIN_GOLA_COLOR], "yes")) @@ -111,7 +112,7 @@ int main (int argc, char const *const *argv, char const *const *envp) else if (strcmp(gola[MAIN_GOLA_COLOR], "auto")) strerr_dief1x(100, "--color value must be yes, no, or auto") ; } - if (!force_color) g->color = isatty(1) ; + if (!force_color) g->color = g->istty ; } if (!*argv) dieusage() ; diff --git a/src/s6/service_start.c b/src/s6/service_start.c index f9b5039..4b8c3a6 100644 --- a/src/s6/service_start.c +++ b/src/s6/service_start.c @@ -3,6 +3,9 @@ #include <skalibs/uint64.h> #include <skalibs/strerr.h> #include <skalibs/gol.h> +#include <skalibs/env.h> + +#include <s6-rc/config.h> #include "s6-internal.h" @@ -11,22 +14,41 @@ enum service_start_golb_e { + SERVICE_START_GOLB_DRYRUN, SERVICE_START_GOLB_WAIT, SERVICE_START_GOLB_N } ; -static gol_bool const service_start_golb[2] = +static gol_bool const service_start_golb[3] = { + { .so = 'n', .lo = "dryrun", .set = 1, .mask = 1 << SERVICE_START_GOLB_DRYRUN }, { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << SERVICE_START_GOLB_WAIT }, { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << SERVICE_START_GOLB_WAIT } } ; int service_start (char const *const *argv) { + size_t argc = env_len(argv) ; uint64_t golb = 0 ; PROG = "s6 service start" ; argv += gol_argv(argv, service_start_golb, 0, 0, 0, &golb, 0) ; if (!argv) dieusage() ; + + { + size_t m = 0 ; + char const *newargv[10 + argc] ; + char fmtv[UINT_FMT] ; + + newargv[m++] = S6RC_EXTBINPREFIX "s6-rc" ; + newargv[m++] = "-v" ; + newargv[m++] = fmtv ; + fmtv[uint_fmt(fmtv, g->verbosity)] = 0 ; + if (golb & 1 << SERVICE_START_GOLB_DRYRUN) + { + newargv[m++] = "-n" ; + newargv[m++] = "1" ; + } + } return 0 ; } |
