diff options
Diffstat (limited to 'src/s6/service_start.c')
| -rw-r--r-- | src/s6/service_start.c | 24 |
1 files changed, 23 insertions, 1 deletions
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 ; } |
