aboutsummaryrefslogtreecommitdiffstats
path: root/src/s6
diff options
context:
space:
mode:
Diffstat (limited to 'src/s6')
-rw-r--r--src/s6/s6-internal.h8
-rw-r--r--src/s6/s6.c9
-rw-r--r--src/s6/service_start.c24
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 ;
}