aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-06-30 14:41:53 +0000
committerLaurent Bercot <ska@appnovation.com>2025-06-30 14:41:53 +0000
commit6d953b22ae50261812b27ba84ecd6dc33b2007de (patch)
tree82d61de117f1e8ec02522c3d2eb40bd78877c543
parent8a6eaed305dbe4ec6a87fe37000f7461bf563937 (diff)
downloads6-frontend-6d953b22ae50261812b27ba84ecd6dc33b2007de.tar.gz
Adapt to new gol
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rw-r--r--package/deps.mak8
-rw-r--r--src/include-local/s6f.h2
-rw-r--r--src/libs6f/s6f_report_state_change.c6
-rw-r--r--src/s6/deps-exe/s66
-rw-r--r--src/s6/process_kill.c19
-rw-r--r--src/s6/process_restart.c18
-rw-r--r--src/s6/process_start.c38
-rw-r--r--src/s6/process_startstop.c45
-rw-r--r--src/s6/process_status.c16
-rw-r--r--src/s6/process_stop.c38
-rw-r--r--src/s6/s6.c90
-rw-r--r--src/s6/service_startstop.c (renamed from src/s6/service_start.c)61
-rw-r--r--src/s6/service_status.c14
-rw-r--r--src/s6/service_stop.c32
14 files changed, 167 insertions, 226 deletions
diff --git a/package/deps.mak b/package/deps.mak
index 4f40ecf..3b7c33c 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -16,14 +16,12 @@ src/s6/help.o src/s6/help.lo: src/s6/help.c src/s6/s6-internal.h
src/s6/process.o src/s6/process.lo: src/s6/process.c src/s6/s6-internal.h
src/s6/process_kill.o src/s6/process_kill.lo: src/s6/process_kill.c src/s6/s6-internal.h
src/s6/process_restart.o src/s6/process_restart.lo: src/s6/process_restart.c src/s6/s6-internal.h
-src/s6/process_start.o src/s6/process_start.lo: src/s6/process_start.c src/s6/s6-internal.h
+src/s6/process_startstop.o src/s6/process_startstop.lo: src/s6/process_startstop.c src/s6/s6-internal.h
src/s6/process_status.o src/s6/process_status.lo: src/s6/process_status.c src/s6/s6-internal.h
-src/s6/process_stop.o src/s6/process_stop.lo: src/s6/process_stop.c src/s6/s6-internal.h
src/s6/s6.o src/s6/s6.lo: src/s6/s6.c src/include/s6-frontend/config.h src/s6/s6-internal.h
src/s6/service.o src/s6/service.lo: src/s6/service.c src/s6/s6-internal.h
-src/s6/service_start.o src/s6/service_start.lo: src/s6/service_start.c src/s6/s6-internal.h
+src/s6/service_startstop.o src/s6/service_startstop.lo: src/s6/service_startstop.c src/s6/s6-internal.h
src/s6/service_status.o src/s6/service_status.lo: src/s6/service_status.c src/s6/s6-internal.h
-src/s6/service_stop.o src/s6/service_stop.lo: src/s6/service_stop.c src/s6/s6-internal.h
src/s6/util.o src/s6/util.lo: src/s6/util.c src/s6/s6-internal.h
s6-frontend-alias: EXTRA_LIBS :=
@@ -40,5 +38,5 @@ else
libs6f.a.xyzzy:src/libs6f/s6f_confdir_open.lo src/libs6f/s6f_lock.lo src/libs6f/s6f_mkdirp.lo src/libs6f/s6f_report_state_change.lo src/libs6f/s6f_user_get_confdirs.lo ${LIBNSSS}
endif
s6: EXTRA_LIBS :=
-s6: src/s6/s6.o src/s6/help.o src/s6/util.o src/s6/process.o src/s6/process_kill.o src/s6/process_restart.o src/s6/process_start.o src/s6/process_status.o src/s6/process_stop.o src/s6/service.o src/s6/service_start.o src/s6/service_status.o src/s6/service_stop.o libs6f.a.xyzzy -ls6rc -ls6 -lskarnet
+s6: src/s6/s6.o src/s6/help.o src/s6/util.o src/s6/process.o src/s6/process_kill.o src/s6/process_restart.o src/s6/process_startstop.o src/s6/process_status.o src/s6/service.o src/s6/service_startstop.o src/s6/service_status.o libs6f.a.xyzzy -ls6rc -ls6 -lskarnet
INTERNAL_LIBS := libs6f.a.xyzzy
diff --git a/src/include-local/s6f.h b/src/include-local/s6f.h
index 2eafd75..b11da75 100644
--- a/src/include-local/s6f.h
+++ b/src/include-local/s6f.h
@@ -22,7 +22,7 @@ extern void s6f_mkdirp (char const *, mode_t) ;
extern int s6f_confdir_open (char const *, int) ;
extern int s6f_lock (char const *, int) ;
-extern void s6f_report_state_change (uint32_t, unsigned char const *, unsigned char const *, char const *) ;
+extern void s6f_report_state_change (uint32_t, unsigned char const *, unsigned char const *, char const *, int) ;
extern void s6f_user_get_confdirs (s6f_confdirs *, stralloc *) ;
diff --git a/src/libs6f/s6f_report_state_change.c b/src/libs6f/s6f_report_state_change.c
index 70d2cd1..9cb718b 100644
--- a/src/libs6f/s6f_report_state_change.c
+++ b/src/libs6f/s6f_report_state_change.c
@@ -10,7 +10,7 @@
#include "s6f.h"
-void s6f_report_state_change (uint32_t n, unsigned char const *oldstate, unsigned char const *newstate, char const *compiled)
+void s6f_report_state_change (uint32_t n, unsigned char const *oldstate, unsigned char const *newstate, char const *compiled, int h)
{
if (!memcmp(oldstate, newstate, n))
{
@@ -45,7 +45,9 @@ void s6f_report_state_change (uint32_t n, unsigned char const *oldstate, unsigne
if (!r) strerr_dief3x(4, "invalid service database in ", compiled, "/db") ;
if (buffer_puts(buffer_1, PROG) < 0
- || buffer_puts(buffer_1, ": info: the following atomic services have changed state:\n") < 0)
+ || buffer_puts(buffer_1, ": info: the following atomic services have been brought ") < 0
+ || buffer_puts(buffer_1, h ? "up" : "down") < 0
+ || buffer_puts(buffer_1, ":\n") < 0)
strerr_diefu1sys(111, "write to stdout") ;
for (uint32_t i = 0 ; i < n ; i++)
{
diff --git a/src/s6/deps-exe/s6 b/src/s6/deps-exe/s6
index 1d03ef1..9c0862f 100644
--- a/src/s6/deps-exe/s6
+++ b/src/s6/deps-exe/s6
@@ -3,13 +3,11 @@ util.o
process.o
process_kill.o
process_restart.o
-process_start.o
+process_startstop.o
process_status.o
-process_stop.o
service.o
-service_start.o
+service_startstop.o
service_status.o
-service_stop.o
libs6f.a.xyzzy
-ls6rc
-ls6
diff --git a/src/s6/process_kill.c b/src/s6/process_kill.c
index e33b47f..64f7ffb 100644
--- a/src/s6/process_kill.c
+++ b/src/s6/process_kill.c
@@ -46,31 +46,30 @@ static int process_kill_hack_kill (int sig, char const *const *argv)
}
-enum process_kill_gola_e
+enum gola_e
{
- PROCESS_KILL_GOLA_SIGNAL,
- PROCESS_KILL_GOLA_N
+ GOLA_SIGNAL,
+ GOLA_N
} ;
-static gol_arg const process_kill_gola[PROCESS_KILL_GOLA_N] =
+static gol_arg const rgola[GOLA_N] =
{
- { .so = 's', .lo = "signal", .i = PROCESS_KILL_GOLA_SIGNAL },
+ { .so = 's', .lo = "signal", .i = GOLA_SIGNAL },
} ;
int process_kill (char const *const *argv)
{
- uint64_t golb = 0 ;
- char const *gola[PROCESS_KILL_GOLA_N] = { 0 } ;
+ char const *wgola[GOLA_N] = { 0 } ;
char const *svcopt = 0 ;
size_t argc ;
int sig = SIGTERM ;
PROG = "s6 process kill" ;
- argv += gol_argv(argv, 0, 0, process_kill_gola, PROCESS_KILL_GOLA_N, &golb, gola) ;
+ argv += gol_argv(argv, 0, 0, rgola, GOLA_N, 0, wgola) ;
if (!argv) dieusage() ;
- if (gola[PROCESS_KILL_GOLA_SIGNAL])
+ if (wgola[GOLA_SIGNAL])
{
- if (!sig0_scan(gola[PROCESS_KILL_GOLA_SIGNAL], &sig))
+ if (!sig0_scan(wgola[GOLA_SIGNAL], &sig))
strerr_dief1x(100, "--signal= argument must be the name or number of a signal") ;
}
argc = env_len(argv) ;
diff --git a/src/s6/process_restart.c b/src/s6/process_restart.c
index 9e8c083..73e66f3 100644
--- a/src/s6/process_restart.c
+++ b/src/s6/process_restart.c
@@ -12,27 +12,27 @@
#define USAGE "s6 process restart [ -W|--nowait ] services..."
#define dieusage() strerr_dieusage(100, USAGE)
-enum process_restart_golb_e
+enum golb_e
{
- PROCESS_RESTART_GOLB_WAIT,
- PROCESS_RESTART_GOLB_N
+ GOLB_WAIT,
+ GOLB_N
} ;
-static gol_bool const process_restart_golb[2] =
+static gol_bool const rgolb[2] =
{
- { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << PROCESS_RESTART_GOLB_WAIT },
- { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << PROCESS_RESTART_GOLB_WAIT }
+ { .so = 'W', .lo = "nowait", .clear = 1 << GOLB_WAIT, .set = 0 },
+ { .so = 'w', .lo = "wait", .clear = 0, .set = 1 << GOLB_WAIT }
} ;
int process_restart (char const *const *argv)
{
- uint64_t golb = 1 << PROCESS_RESTART_GOLB_WAIT ;
+ uint64_t wgolb = 1 << GOLB_WAIT ;
size_t argc ;
PROG = "s6 process restart" ;
- argv += gol_argv(argv, process_restart_golb, 2, 0, 0, &golb, 0) ;
+ argv += gol_argv(argv, rgolb, 2, 0, 0, &wgolb, 0) ;
if (!argv) dieusage() ;
argc = env_len(argv) ;
process_check_services(argv, argc) ;
- return process_send_svc(golb & 1 << PROCESS_RESTART_GOLB_WAIT ? "-rwR" : "-r", argv, argc) ;
+ return process_send_svc(wgolb & 1 << GOLB_WAIT ? "-rwR" : "-r", argv, argc) ;
}
diff --git a/src/s6/process_start.c b/src/s6/process_start.c
deleted file mode 100644
index a2186cf..0000000
--- a/src/s6/process_start.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ISC license. */
-
-#include <stddef.h>
-
-#include <skalibs/uint64.h>
-#include <skalibs/env.h>
-#include <skalibs/strerr.h>
-#include <skalibs/gol.h>
-
-#include "s6-internal.h"
-
-#define USAGE "s6 process start [ -W|--nowait | -w|--wait ] services..."
-#define dieusage() strerr_dieusage(100, USAGE)
-
-enum process_start_golb_e
-{
- PROCESS_START_GOLB_WAIT,
- PROCESS_START_GOLB_N
-} ;
-
-static gol_bool const process_start_golb[2] =
-{
- { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << PROCESS_START_GOLB_WAIT },
- { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << PROCESS_START_GOLB_WAIT }
-} ;
-
-int process_start (char const *const *argv)
-{
- uint64_t golb = 1 << PROCESS_START_GOLB_WAIT ;
- size_t argc ;
- PROG = "s6 process start" ;
-
- argv += gol_argv(argv, process_start_golb, 2, 0, 0, &golb, 0) ;
- if (!argv) dieusage() ;
- argc = env_len(argv) ;
- process_check_services(argv, argc) ;
- return process_send_svc(golb & 1 << PROCESS_START_GOLB_WAIT ? "-uwU" : "-u", argv, argc) ;
-}
diff --git a/src/s6/process_startstop.c b/src/s6/process_startstop.c
new file mode 100644
index 0000000..8a5089e
--- /dev/null
+++ b/src/s6/process_startstop.c
@@ -0,0 +1,45 @@
+/* ISC license. */
+
+#include <stddef.h>
+
+#include <skalibs/uint64.h>
+#include <skalibs/env.h>
+#include <skalibs/strerr.h>
+#include <skalibs/gol.h>
+
+#include "s6-internal.h"
+
+enum golb_e
+{
+ GOLB_WAIT,
+ GOLB_N
+} ;
+
+static gol_bool const rgolb[2] =
+{
+ { .so = 'W', .lo = "nowait", .clear = 1 << GOLB_WAIT, .set = 0 },
+ { .so = 'w', .lo = "wait", .clear = 0, .set = 1 << GOLB_WAIT }
+} ;
+
+static int process_startstop (char const *const *argv, int h)
+{
+ uint64_t wgolb = 1 << GOLB_WAIT ;
+ size_t argc ;
+ PROG = h ? "s6 process start" : "s6 process stop" ;
+
+ argv += gol_argv(argv, rgolb, 2, 0, 0, &wgolb, 0) ;
+ if (!argv) strerr_dien(100, 4, PROG, ": usage: ", PROG, " [ -W|--nowait | -w|--wait ] services...") ;
+ argc = env_len(argv) ;
+ process_check_services(argv, argc) ;
+ return process_send_svc(wgolb & 1 << GOLB_WAIT ? h ? "-uwU" : "-dwD" : h ? "-u" : "-d", argv, argc) ;
+}
+
+int process_start (char const *const *argv)
+{
+ return process_startstop(argv, 1) ;
+}
+
+int process_stop (char const *const *argv)
+{
+ return process_startstop(argv, 0) ;
+}
diff --git a/src/s6/process_status.c b/src/s6/process_status.c
index 96eb84b..a13938d 100644
--- a/src/s6/process_status.c
+++ b/src/s6/process_status.c
@@ -73,26 +73,26 @@ static int do_status (char const *dir, int withlog)
}
-enum process_status_golb_e
+enum golb_e
{
- PROCESS_STATUS_GOLB_WITHLOGS,
- PROCESS_STATUS_GOLB_N
+ GOLB_WITHLOGS,
+ GOLB_N
} ;
-static gol_bool const process_status_golb[1] =
+static gol_bool const rgolb[1] =
{
- { .so = 'l', .lo = "with-logs", .set = 1, .mask = 1 << PROCESS_STATUS_GOLB_WITHLOGS }
+ { .so = 'l', .lo = "with-logs", .clear = 0, .set = 1 << GOLB_WITHLOGS }
} ;
int process_status (char const *const *argv)
{
size_t scandirlen = strlen(g->dirs.scan) ;
- uint64_t golb = 0 ;
+ uint64_t wgolb = 0 ;
int e = 0 ;
PROG = "s6 process status" ;
- argv += gol_argv(argv, process_status_golb, 1, 0, 0, &golb, 0) ;
+ argv += gol_argv(argv, rgolb, 1, 0, 0, &wgolb, 0) ;
if (!argv) dieusage() ;
process_check_services(argv, env_len(argv)) ;
for (; *argv ; argv++)
@@ -102,7 +102,7 @@ int process_status (char const *const *argv)
memcpy(path, g->dirs.scan, scandirlen) ;
path[scandirlen] = '/' ;
memcpy(path + scandirlen + 1, *argv, len+1) ;
- if (do_status(path, !!(golb & 1 << PROCESS_STATUS_GOLB_WITHLOGS))) e = 1 ;
+ if (do_status(path, !!(wgolb & 1 << GOLB_WITHLOGS))) e = 1 ;
}
return e ;
}
diff --git a/src/s6/process_stop.c b/src/s6/process_stop.c
deleted file mode 100644
index 6f11b02..0000000
--- a/src/s6/process_stop.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ISC license. */
-
-#include <stddef.h>
-
-#include <skalibs/uint64.h>
-#include <skalibs/env.h>
-#include <skalibs/strerr.h>
-#include <skalibs/gol.h>
-
-#include "s6-internal.h"
-
-#define USAGE "s6 process stop [ -W|--nowait | -w|--wait ] services..."
-#define dieusage() strerr_dieusage(100, USAGE)
-
-enum process_stop_golb_e
-{
- PROCESS_STOP_GOLB_WAIT,
- PROCESS_STOP_GOLB_N
-} ;
-
-static gol_bool const process_stop_golb[2] =
-{
- { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << PROCESS_STOP_GOLB_WAIT },
- { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << PROCESS_STOP_GOLB_WAIT }
-} ;
-
-int process_stop (char const *const *argv)
-{
- uint64_t golb = 1 << PROCESS_STOP_GOLB_WAIT ;
- size_t argc ;
- PROG = "s6 process stop" ;
-
- argv += gol_argv(argv, process_stop_golb, 2, 0, 0, &golb, 0) ;
- if (!argv) dieusage() ;
- argc = env_len(argv) ;
- process_check_services(argv, argc) ;
- return process_send_svc(golb & 1 << PROCESS_STOP_GOLB_WAIT ? "-dwD" : "-d", argv, argc) ;
-}
diff --git a/src/s6/s6.c b/src/s6/s6.c
index 2467f3c..e7ecd6f 100644
--- a/src/s6/s6.c
+++ b/src/s6/s6.c
@@ -28,47 +28,47 @@ int version (char const *const *argv)
return 0 ;
}
-enum main_golb_e
+enum golb_e
{
- MAIN_GOLB_HELP,
- MAIN_GOLB_VERSION,
- MAIN_GOLB_USER,
- MAIN_GOLB_N
+ GOLB_HELP,
+ GOLB_VERSION,
+ GOLB_USER,
+ GOLB_N
} ;
-enum main_gola_e
+enum gola_e
{
- MAIN_GOLA_SCANDIR,
- MAIN_GOLA_LIVEDIR,
- MAIN_GOLA_REPODIR,
- MAIN_GOLA_BOOTDIR,
- MAIN_GOLA_STMPDIR,
- MAIN_GOLA_VERBOSITY,
- MAIN_GOLA_COLOR,
- MAIN_GOLA_N
+ GOLA_SCANDIR,
+ GOLA_LIVEDIR,
+ GOLA_REPODIR,
+ GOLA_BOOTDIR,
+ GOLA_STMPDIR,
+ GOLA_VERBOSITY,
+ GOLA_COLOR,
+ GOLA_N
} ;
-static gol_bool const main_golb[MAIN_GOLB_N] =
+static gol_bool const rgolb[GOLB_N] =
{
- { .so = 'h', .lo = "help", .set = 1, .mask = 1 << MAIN_GOLB_HELP },
- { .so = 'V', .lo = "version", .set = 1, .mask = 1 << MAIN_GOLB_VERSION },
- { .so = 0, .lo = "user", .set = 1, .mask = 1 << MAIN_GOLB_USER }
+ { .so = 'h', .lo = "help", .clear = 0, .set = 1 << GOLB_HELP },
+ { .so = 'V', .lo = "version", .clear = 0, .set = 1 << GOLB_VERSION },
+ { .so = 0, .lo = "user", .clear = 0, .set = 1 << GOLB_USER }
} ;
-static gol_arg const main_gola[MAIN_GOLA_N] =
+static gol_arg const rgola[GOLA_N] =
{
- { .so = 's', .lo = "scandir", .i = MAIN_GOLA_SCANDIR },
- { .so = 'l', .lo = "livedir", .i = MAIN_GOLA_LIVEDIR },
- { .so = 'r', .lo = "repodir", .i = MAIN_GOLA_REPODIR },
- { .so = 'b', .lo = "bootdir", .i = MAIN_GOLA_BOOTDIR },
- { .so = 0, .lo = "stmpdir", .i = MAIN_GOLA_STMPDIR },
- { .so = 'v', .lo = "verbosity", .i = MAIN_GOLA_VERBOSITY },
- { .so = 0, .lo = "color", .i = MAIN_GOLA_COLOR }
+ { .so = 's', .lo = "scandir", .i = GOLA_SCANDIR },
+ { .so = 'l', .lo = "livedir", .i = GOLA_LIVEDIR },
+ { .so = 'r', .lo = "repodir", .i = GOLA_REPODIR },
+ { .so = 'b', .lo = "bootdir", .i = GOLA_BOOTDIR },
+ { .so = 0, .lo = "stmpdir", .i = GOLA_STMPDIR },
+ { .so = 'v', .lo = "verbosity", .i = GOLA_VERBOSITY },
+ { .so = 0, .lo = "color", .i = GOLA_COLOR }
} ;
struct global_s *g ;
-static struct command_s const main_commands[] =
+static struct command_s const commands[] =
{
{ .s = "help", .f = &help },
{ .s = "process", .f = &process },
@@ -79,55 +79,55 @@ static struct command_s const main_commands[] =
int main (int argc, char const *const *argv, char const *const *envp)
{
struct global_s globals_in_the_stack = GLOBAL_ZERO ;
- char const *gola[MAIN_GOLA_N] = { 0 } ;
- uint64_t golb = 0 ;
+ char const *wgola[GOLA_N] = { 0 } ;
+ uint64_t wgolb = 0 ;
unsigned int golc ;
struct command_s *cmd ;
PROG = "s6" ;
g = &globals_in_the_stack ;
- golc = gol_main(argc, argv, main_golb, MAIN_GOLB_N, main_gola, MAIN_GOLA_N, &golb, gola) ;
+ golc = gol_main(argc, argv, rgolb, GOLB_N, rgola, GOLA_N, &wgolb, wgola) ;
argc -= golc ; argv += golc ;
- if (gola[MAIN_GOLA_VERBOSITY] && !uint0_scan(gola[MAIN_GOLA_VERBOSITY], &g->verbosity))
+ if (wgola[GOLA_VERBOSITY] && !uint0_scan(wgola[GOLA_VERBOSITY], &g->verbosity))
strerr_dief1x(100, "verbosity must be an unsigned integer") ;
- if (golb & 1 << MAIN_GOLB_VERSION) version(argv) ;
- if (golb & 1 << MAIN_GOLB_HELP) help(argv) ;
- if (golb & (1 << MAIN_GOLB_VERSION | 1 << MAIN_GOLB_HELP)) return 0 ;
+ if (wgolb & 1 << GOLB_VERSION) version(argv) ;
+ if (wgolb & 1 << GOLB_HELP) help(argv) ;
+ if (wgolb & (1 << GOLB_VERSION | 1 << GOLB_HELP)) return 0 ;
- if (gola[MAIN_GOLA_SCANDIR]) g->dirs.scan = gola[MAIN_GOLA_SCANDIR] ;
- if (gola[MAIN_GOLA_LIVEDIR]) g->dirs.live = gola[MAIN_GOLA_LIVEDIR] ;
- if (gola[MAIN_GOLA_REPODIR]) g->dirs.repo = gola[MAIN_GOLA_REPODIR] ;
- if (gola[MAIN_GOLA_BOOTDIR]) g->dirs.boot = gola[MAIN_GOLA_BOOTDIR] ;
- if (gola[MAIN_GOLA_STMPDIR]) g->dirs.stmp = gola[MAIN_GOLA_STMPDIR] ;
+ if (wgola[GOLA_SCANDIR]) g->dirs.scan = wgola[GOLA_SCANDIR] ;
+ if (wgola[GOLA_LIVEDIR]) g->dirs.live = wgola[GOLA_LIVEDIR] ;
+ if (wgola[GOLA_REPODIR]) g->dirs.repo = wgola[GOLA_REPODIR] ;
+ if (wgola[GOLA_BOOTDIR]) g->dirs.boot = wgola[GOLA_BOOTDIR] ;
+ if (wgola[GOLA_STMPDIR]) g->dirs.stmp = wgola[GOLA_STMPDIR] ;
{
int force_color = 0 ;
g->istty = isatty(1) ;
- if (gola[MAIN_GOLA_COLOR])
+ if (wgola[GOLA_COLOR])
{
- if (!strcmp(gola[MAIN_GOLA_COLOR], "yes"))
+ if (!strcmp(wgola[GOLA_COLOR], "yes"))
{
force_color = 1 ;
g->color = 1 ;
}
- else if (!strcmp(gola[MAIN_GOLA_COLOR], "no"))
+ else if (!strcmp(wgola[GOLA_COLOR], "no"))
{
force_color = 1 ;
g->color = 0 ;
}
- else if (strcmp(gola[MAIN_GOLA_COLOR], "auto"))
+ else if (strcmp(wgola[GOLA_COLOR], "auto"))
strerr_dief1x(100, "--color value must be yes, no, or auto") ;
}
if (!force_color) g->color = g->istty ;
}
- g->isuser = !!(golb & 1 << MAIN_GOLB_USER) ;
+ g->isuser = !!(wgolb & 1 << GOLB_USER) ;
if (g->isuser) s6f_user_get_confdirs(&g->dirs, &g->userstorage) ;
if (!*argv) dieusage() ;
- cmd = BSEARCH(struct command_s, *argv, main_commands) ;
+ cmd = BSEARCH(struct command_s, *argv, commands) ;
if (!cmd) dieusage() ;
return (*cmd->f)(++argv) ;
}
diff --git a/src/s6/service_start.c b/src/s6/service_startstop.c
index 90a3087..c4946fc 100644
--- a/src/s6/service_start.c
+++ b/src/s6/service_startstop.c
@@ -17,38 +17,35 @@
#include "s6-internal.h"
-#define USAGE "s6 service start services..."
-#define dieusage() strerr_dieusage(100, USAGE)
-
-enum service_start_golb_e
+enum golb_e
{
- SERVICE_START_GOLB_DRYRUN,
- SERVICE_START_GOLB_WAIT,
- SERVICE_START_GOLB_N
+ GOLB_DRYRUN,
+ GOLB_WAIT,
+ GOLB_N
} ;
-enum service_start_gola_e
+enum gola_e
{
- SERVICE_START_GOLA_TIMEOUT,
- SERVICE_START_GOLA_N
+ GOLA_TIMEOUT,
+ GOLA_N
} ;
-static gol_bool const service_start_golb[3] =
+static gol_bool const rgolb[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 }
+ { .so = 'n', .lo = "dryrun", .clear = 0, .set = 1 << GOLB_DRYRUN },
+ { .so = 'W', .lo = "nowait", .clear = 1 << GOLB_WAIT, .set = 0 },
+ { .so = 'w', .lo = "wait", .clear = 0, .set = 1 << GOLB_WAIT }
} ;
-static gol_arg const service_start_gola[SERVICE_START_GOLA_N] =
+static gol_arg const rgola[GOLA_N] =
{
- { .so = 't', .lo = "timeout", .i = SERVICE_START_GOLA_TIMEOUT }
+ { .so = 't', .lo = "timeout", .i = GOLA_TIMEOUT }
} ;
-int service_start (char const *const *argv)
+static int service_startstop (char const *const *argv, int h)
{
- char const *gola[SERVICE_START_GOLA_N] = { 0 } ;
- uint64_t golb = 0 ;
+ char const *wgola[GOLA_N] = { 0 } ;
+ uint64_t wgolb = 0 ;
unsigned int t = 0 ;
size_t argc = env_len(argv) ;
pid_t pid ;
@@ -56,14 +53,14 @@ int service_start (char const *const *argv)
uint32_t nlong, nshort, n ;
int livelock, compiledlock ;
size_t livelen = strlen(g->dirs.live) ;
- PROG = "s6 service start" ;
+ PROG = h ? "s6 service start" : "s6 service stop" ;
- argv += gol_argv(argv, service_start_golb, 3, service_start_gola, SERVICE_START_GOLA_N, &golb, gola) ;
- if (!*argv) dieusage() ;
+ argv += gol_argv(argv, rgolb, 3, rgola, GOLA_N, &wgolb, wgola) ;
+ if (!*argv) strerr_dieusage(100, h ? "s6 service start services..." : "s6 service stop services...") ;
- if (gola[SERVICE_START_GOLA_TIMEOUT])
+ if (wgola[GOLA_TIMEOUT])
{
- if (!uint0_scan(gola[SERVICE_START_GOLA_TIMEOUT], &t))
+ if (!uint0_scan(wgola[GOLA_TIMEOUT], &t))
strerr_dief1x(100, "timeout must be an integer (milliseconds)") ;
}
s6f_lock(g->dirs.stmp, 0) ; /* leaks, it's fine */
@@ -96,7 +93,7 @@ int service_start (char const *const *argv)
newargv[m++] = fmtt ;
fmtt[uint_fmt(fmtt, t)] = 0 ;
}
- if (golb & 1 << SERVICE_START_GOLB_DRYRUN)
+ if (wgolb & 1 << GOLB_DRYRUN)
{
newargv[m++] = "-n" ;
newargv[m++] = "1" ;
@@ -104,7 +101,7 @@ int service_start (char const *const *argv)
newargv[m++] = "-l" ;
newargv[m++] = g->dirs.live ;
newargv[m++] = "--" ;
- newargv[m++] = "start" ;
+ newargv[m++] = h ? "start" : "stop" ;
while (*argv) newargv[m++] = *argv++ ;
newargv[m++] = 0 ;
pid = cspawn(newargv[0], newargv, (char const *const *)environ, CSPAWN_FLAGS_SIGBLOCKNONE, 0, 0) ;
@@ -117,6 +114,16 @@ int service_start (char const *const *argv)
unsigned char newstate[n] ;
if (!s6rc_live_state_read(g->dirs.live, newstate, n))
strerr_diefu2sys(111, "read state in ", g->dirs.live) ;
- s6f_report_state_change(n, oldstate, newstate, dbfn) ;
+ s6f_report_state_change(n, oldstate, newstate, dbfn, h) ;
return wait_estatus(wstat) ;
}
+
+int service_start (char const *const *argv)
+{
+ return service_startstop(argv, 1) ;
+}
+
+int service_stop (char const *const *argv)
+{
+ return service_startstop(argv, 0) ;
+}
diff --git a/src/s6/service_status.c b/src/s6/service_status.c
index ae6f97d..5bf71b5 100644
--- a/src/s6/service_status.c
+++ b/src/s6/service_status.c
@@ -9,23 +9,23 @@
#define USAGE "s6 service status services..."
#define dieusage() strerr_dieusage(100, USAGE)
-enum service_status_golb_e
+enum golb_e
{
- SERVICE_STATUS_GOLB_WAIT,
- SERVICE_STATUS_GOLB_N
+ GOLB_WAIT,
+ GOLB_N
} ;
-static gol_bool const service_status_golb[2] =
+static gol_bool const rgolb[2] =
{
- { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << SERVICE_STATUS_GOLB_WAIT }
+ { .so = 'w', .lo = "wait", .clear = 0, .set = 1 << GOLB_WAIT }
} ;
int service_status (char const *const *argv)
{
- uint64_t golb = 0 ;
+ uint64_t wgolb = 0 ;
PROG = "s6 service status" ;
- argv += gol_argv(argv, service_status_golb, 0, 0, 0, &golb, 0) ;
+ argv += gol_argv(argv, rgolb, 0, 0, 0, &wgolb, 0) ;
if (!argv) dieusage() ;
return 0 ;
}
diff --git a/src/s6/service_stop.c b/src/s6/service_stop.c
deleted file mode 100644
index fc1db58..0000000
--- a/src/s6/service_stop.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ISC license. */
-
-#include <skalibs/uint64.h>
-#include <skalibs/strerr.h>
-#include <skalibs/gol.h>
-
-#include "s6-internal.h"
-
-#define USAGE "s6 service stop services..."
-#define dieusage() strerr_dieusage(100, USAGE)
-
-enum service_stop_golb_e
-{
- SERVICE_STOP_GOLB_WAIT,
- SERVICE_STOP_GOLB_N
-} ;
-
-static gol_bool const service_stop_golb[2] =
-{
- { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << SERVICE_STOP_GOLB_WAIT },
- { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << SERVICE_STOP_GOLB_WAIT }
-} ;
-
-int service_stop (char const *const *argv)
-{
- uint64_t golb = 0 ;
- PROG = "s6 service stop" ;
-
- argv += gol_argv(argv, service_stop_golb, 0, 0, 0, &golb, 0) ;
- if (!argv) dieusage() ;
- return 0 ;
-}