diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-06-30 14:41:53 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-06-30 14:41:53 +0000 |
| commit | 6d953b22ae50261812b27ba84ecd6dc33b2007de (patch) | |
| tree | 82d61de117f1e8ec02522c3d2eb40bd78877c543 | |
| parent | 8a6eaed305dbe4ec6a87fe37000f7461bf563937 (diff) | |
| download | s6-frontend-6d953b22ae50261812b27ba84ecd6dc33b2007de.tar.gz | |
Adapt to new gol
Signed-off-by: Laurent Bercot <ska@appnovation.com>
| -rw-r--r-- | package/deps.mak | 8 | ||||
| -rw-r--r-- | src/include-local/s6f.h | 2 | ||||
| -rw-r--r-- | src/libs6f/s6f_report_state_change.c | 6 | ||||
| -rw-r--r-- | src/s6/deps-exe/s6 | 6 | ||||
| -rw-r--r-- | src/s6/process_kill.c | 19 | ||||
| -rw-r--r-- | src/s6/process_restart.c | 18 | ||||
| -rw-r--r-- | src/s6/process_start.c | 38 | ||||
| -rw-r--r-- | src/s6/process_startstop.c | 45 | ||||
| -rw-r--r-- | src/s6/process_status.c | 16 | ||||
| -rw-r--r-- | src/s6/process_stop.c | 38 | ||||
| -rw-r--r-- | src/s6/s6.c | 90 | ||||
| -rw-r--r-- | src/s6/service_startstop.c (renamed from src/s6/service_start.c) | 61 | ||||
| -rw-r--r-- | src/s6/service_status.c | 14 | ||||
| -rw-r--r-- | src/s6/service_stop.c | 32 |
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 ; -} |
