From 5f46f6f2d649b2bb8664f9c749e15acd8f529b6c Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 24 Oct 2025 16:46:58 +0000 Subject: Separate s6 from s6-frontend, fix configure for no-nsss build --- src/s6/deps-exe/s6 | 15 ----- src/s6/help.c | 37 ------------- src/s6/process.c | 89 ------------------------------ src/s6/process_kill.c | 93 ------------------------------- src/s6/process_restart.c | 38 ------------- src/s6/process_startstop.c | 45 --------------- src/s6/process_status.c | 108 ------------------------------------ src/s6/s6-internal.h | 92 ------------------------------- src/s6/s6.c | 133 --------------------------------------------- src/s6/service.c | 28 ---------- src/s6/service_startstop.c | 129 ------------------------------------------- src/s6/service_status.c | 31 ----------- src/s6/util.c | 15 ----- 13 files changed, 853 deletions(-) delete mode 100644 src/s6/deps-exe/s6 delete mode 100644 src/s6/help.c delete mode 100644 src/s6/process.c delete mode 100644 src/s6/process_kill.c delete mode 100644 src/s6/process_restart.c delete mode 100644 src/s6/process_startstop.c delete mode 100644 src/s6/process_status.c delete mode 100644 src/s6/s6-internal.h delete mode 100644 src/s6/s6.c delete mode 100644 src/s6/service.c delete mode 100644 src/s6/service_startstop.c delete mode 100644 src/s6/service_status.c delete mode 100644 src/s6/util.c (limited to 'src/s6') diff --git a/src/s6/deps-exe/s6 b/src/s6/deps-exe/s6 deleted file mode 100644 index ad88372..0000000 --- a/src/s6/deps-exe/s6 +++ /dev/null @@ -1,15 +0,0 @@ -help.o -util.o -process.o -process_kill.o -process_restart.o -process_startstop.o -process_status.o -service.o -service_startstop.o -service_status.o -libs6f.a.xyzzy --ls6rc --ls6 -${LIBNSSS} --lskarnet diff --git a/src/s6/help.c b/src/s6/help.c deleted file mode 100644 index ac2205c..0000000 --- a/src/s6/help.c +++ /dev/null @@ -1,37 +0,0 @@ -/* ISC license. */ - -#include -#include - -#include "s6-internal.h" - -#define MAIN_HELP_MESSAGE "This is the main help message.\n" - -#define PROCESS_HELP_MESSAGE "This is the process help message.\n" - -#define SERVICE_HELP_MESSAGE "This is the service help message.\n" - -static int print_help (char const *msg) -{ - if (!buffer_putsflush(buffer_1, msg)) - strerr_diefu1sys(111, "write to stdout") ; - return 0 ; -} - -int process_help (char const* const *argv) -{ - (void)argv ; - return print_help(PROCESS_HELP_MESSAGE) ; -} - -int service_help (char const* const *argv) -{ - (void)argv ; - return print_help(SERVICE_HELP_MESSAGE) ; -} - -int help (char const *const *argv) -{ - (void)argv ; - return print_help(MAIN_HELP_MESSAGE) ; -} diff --git a/src/s6/process.c b/src/s6/process.c deleted file mode 100644 index 1dca89d..0000000 --- a/src/s6/process.c +++ /dev/null @@ -1,89 +0,0 @@ -/* ISC license. */ - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "s6-internal.h" - -#define USAGE "s6 process [ process options ] subcommand [ subcommand options ] services... Type \"s6 process help\" for details." -#define dieusage() strerr_dieusage(100, USAGE) - -static int check_service (char const *name, size_t scandirlen) -{ - struct stat st ; - size_t namelen = strlen(name) ; - char path[scandirlen + namelen + 2] ; - memcpy(path, g->dirs.scan, scandirlen) ; - path[scandirlen] = '/' ; - memcpy(path + scandirlen + 1, name, namelen) ; - path[scandirlen + 1 + namelen] = 0 ; - return stat(path, &st) == -1 ? errno == ENOENT ? 0 : -1 : !!S_ISDIR(st.st_mode) ; -} - -void process_check_services (char const *const *argv, size_t argc) -{ - size_t scandirlen = strlen(g->dirs.scan) ; - for (size_t i = 0 ; i < argc ; i++) - { - int r = check_service(argv[i], scandirlen) ; - if (r == -1) - strerr_diefu4sys(111, "stat ", g->dirs.scan, "/", argv[i]) ; - else if (!r) - strerr_dief3x(100, argv[i], "is not registered as a supervised service in ", g->dirs.scan) ; - } -} - -int process_send_svc (char const *svcopt, char const *const *argv, size_t argc) -{ - char const *newargv[5] = { S6_EXTBINPREFIX "s6-svc", svcopt, "--", 0, 0 } ; - size_t scandirlen = strlen(g->dirs.scan) ; - int wstat ; - pid_t pids[argc] ; - - for (size_t i = 0 ; i < argc ; i++) - { - size_t arglen = strlen(argv[i]) ; - char path[scandirlen + arglen + 2] ; - memcpy(path, g->dirs.scan, scandirlen) ; - path[scandirlen] = '/' ; - memcpy(path + scandirlen + 1, argv[i], arglen) ; - path[scandirlen + 1 + arglen] = 0 ; - newargv[3] = path ; - pids[i] = cspawn(newargv[0], newargv, (char const *const *)environ, 0, 0, 0) ; - if (!pids[i]) - strerr_diefu4sys(111, "spawn ", newargv[0], " command for service ", argv[i]) ; - } - waitn_posix(pids, argc, &wstat) ; - return 0 ; -} - - -static struct command_s const process_commands[] = -{ - { .s = "help", .f = &process_help }, - { .s = "kill", .f = &process_kill }, - { .s = "restart", .f = &process_restart }, - { .s = "start", .f = &process_start }, - { .s = "status", .f = &process_status }, - { .s = "stop", .f = &process_stop }, -} ; - -int process (char const *const *argv) -{ - struct command_s *cmd ; - - PROG = "s6 process" ; - if (!*argv) dieusage() ; - cmd = BSEARCH(struct command_s, *argv, process_commands) ; - if (!cmd) dieusage() ; - return (*cmd->f)(++argv) ; -} diff --git a/src/s6/process_kill.c b/src/s6/process_kill.c deleted file mode 100644 index 64f7ffb..0000000 --- a/src/s6/process_kill.c +++ /dev/null @@ -1,93 +0,0 @@ -/* ISC license. */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "s6-internal.h" - -#define USAGE "s6 process kill [ --signal=sig ] services..." -#define dieusage() strerr_dieusage(100, USAGE) - -static int process_kill_hack_kill (int sig, char const *const *argv) -{ - size_t scandirlen = strlen(g->dirs.scan) ; - if (g->verbosity) - { - char fmt[INT_FMT] ; - fmt[int_fmt(fmt, sig)] = 0 ; - strerr_warnw3x("signal ", fmt, " is not natively supported by s6-svc, results may be unreliable") ; - } - - for (; *argv ; argv++) - { - s6_svstatus_t status ; - size_t arglen = strlen(*argv) ; - char path[scandirlen + arglen + 2] ; - memcpy(path, g->dirs.scan, scandirlen) ; - path[scandirlen] = '/' ; - memcpy(path + scandirlen + 1, *argv, arglen) ; - path[scandirlen + 1 + arglen] = 0 ; - if (!s6_svstatus_read(path, &status)) - strerr_diefu2sys(111, "read status file for service ", path) ; - if (status.pid && !status.flagfinishing) kill(status.pid, sig) ; - } - return 0 ; -} - - -enum gola_e -{ - GOLA_SIGNAL, - GOLA_N -} ; - -static gol_arg const rgola[GOLA_N] = -{ - { .so = 's', .lo = "signal", .i = GOLA_SIGNAL }, -} ; - -int process_kill (char const *const *argv) -{ - 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, rgola, GOLA_N, 0, wgola) ; - if (!argv) dieusage() ; - if (wgola[GOLA_SIGNAL]) - { - 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) ; - process_check_services(argv, argc) ; - switch (sig) - { - case SIGALRM : svcopt = "-a" ; break ; - case SIGABRT : svcopt = "-b" ; break ; - case SIGQUIT : svcopt = "-q" ; break ; - case SIGHUP : svcopt = "-h" ; break ; - case SIGKILL : svcopt = "-k" ; break ; - case SIGTERM : svcopt = "-t" ; break ; - case SIGINT : svcopt = "-i" ; break ; - case SIGUSR1 : svcopt = "-1" ; break ; - case SIGUSR2 : svcopt = "-2" ; break ; - case SIGSTOP : svcopt = "-p" ; break ; - case SIGCONT : svcopt = "-c" ; break ; - case SIGWINCH: svcopt = "-y" ; break ; - } - return svcopt ? process_send_svc(svcopt, argv, argc) : process_kill_hack_kill(sig, argv) ; -} diff --git a/src/s6/process_restart.c b/src/s6/process_restart.c deleted file mode 100644 index 73e66f3..0000000 --- a/src/s6/process_restart.c +++ /dev/null @@ -1,38 +0,0 @@ -/* ISC license. */ - -#include - -#include -#include -#include -#include - -#include "s6-internal.h" - -#define USAGE "s6 process restart [ -W|--nowait ] services..." -#define dieusage() strerr_dieusage(100, USAGE) - -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 } -} ; - -int process_restart (char const *const *argv) -{ - uint64_t wgolb = 1 << GOLB_WAIT ; - size_t argc ; - PROG = "s6 process restart" ; - - 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(wgolb & 1 << GOLB_WAIT ? "-rwR" : "-r", argv, argc) ; -} diff --git a/src/s6/process_startstop.c b/src/s6/process_startstop.c deleted file mode 100644 index 8a5089e..0000000 --- a/src/s6/process_startstop.c +++ /dev/null @@ -1,45 +0,0 @@ -/* ISC license. */ - -#include - -#include -#include -#include -#include - -#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 deleted file mode 100644 index a13938d..0000000 --- a/src/s6/process_status.c +++ /dev/null @@ -1,108 +0,0 @@ -/* ISC license. */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "s6-internal.h" - -#define USAGE "s6 process status [ -l|--with-logs ] services..." -#define dieusage() strerr_dieusage(100, USAGE) - -static int spawn_and_wait (char const *const *argv) -{ - int wstat ; - pid_t r ; - pid_t pid = cspawn(argv[0], argv, (char const *const *)environ, 0, 0, 0) ; - if (!pid) - { - if (g->verbosity) strerr_warnwu2sys("spawn ", argv[0]) ; - return 1 ; - } - r = wait_pid(pid, &wstat) ; - if (r != pid) - { - if (g->verbosity) strerr_warnwu2sys("wait for ", argv[0]) ; - return 1 ; - } - return !!WIFSIGNALED(wstat) || !!WEXITSTATUS(wstat) ; -} - -static int do_status (char const *dir, int withlog) -{ - int e ; - char const *argv[4] = { S6_EXTBINPREFIX "s6-svstat", "--", dir, 0 } ; - size_t dirlen = strlen(dir) ; - buffer_puts(buffer_1, dir) ; - buffer_putsflush(buffer_1, ": ") ; - e = spawn_and_wait(argv) ; - if (withlog && (dirlen < 5 || strcmp(dir + dirlen - 4, "/log"))) - { - struct stat st ; - char log[dirlen + 5] ; - memcpy(log, dir, dirlen) ; - memcpy(log + dirlen, "/log", 5) ; - if (stat(log, &st) < 0) - { - if (errno != ENOENT) - { - if (g->verbosity) strerr_warnwu2sys("stat", log) ; - e = 1 ; - } - } - else if (S_ISDIR(st.st_mode)) - { - argv[2] = log ; - buffer_puts(buffer_1, log) ; - buffer_putsflush(buffer_1, ": ") ; - e |= spawn_and_wait(argv) ; - } - } - return e ; -} - - -enum golb_e -{ - GOLB_WITHLOGS, - GOLB_N -} ; - -static gol_bool const rgolb[1] = -{ - { .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 wgolb = 0 ; - int e = 0 ; - PROG = "s6 process status" ; - - argv += gol_argv(argv, rgolb, 1, 0, 0, &wgolb, 0) ; - if (!argv) dieusage() ; - process_check_services(argv, env_len(argv)) ; - for (; *argv ; argv++) - { - size_t len = strlen(*argv) ; - char path[scandirlen + len + 2] ; - memcpy(path, g->dirs.scan, scandirlen) ; - path[scandirlen] = '/' ; - memcpy(path + scandirlen + 1, *argv, len+1) ; - if (do_status(path, !!(wgolb & 1 << GOLB_WITHLOGS))) e = 1 ; - } - return e ; -} diff --git a/src/s6/s6-internal.h b/src/s6/s6-internal.h deleted file mode 100644 index 6ee3939..0000000 --- a/src/s6/s6-internal.h +++ /dev/null @@ -1,92 +0,0 @@ -/* ISC license. */ - -#ifndef S6_INTERNAL_H -#define S6_INTERNAL_H - -#include -#include -#include - -#include -#include - -#include -#include "s6f.h" - - /* util */ - -extern int keycmp (void const *, void const *) ; -#define BSEARCH(type, key, array) bsearch(key, (array), sizeof(array)/sizeof(type), sizeof(type), &keycmp) - - - /* help */ - -extern int process_help (char const *const *) ; -extern int service_help (char const *const *) ; - -extern int help (char const *const *) ; - - - /* process */ - -extern void process_check_services (char const *const *, size_t) ; -extern int process_send_svc (char const *, char const *const *, size_t) ; - -extern int process_kill (char const *const *) ; -extern int process_restart (char const *const *) ; -extern int process_start (char const *const *) ; -extern int process_status (char const *const *) ; -extern int process_stop (char const *const *) ; - -extern int process (char const *const *) ; - - - /* service */ - -extern int service_start (char const *const *) ; -extern int service_status (char const *const *) ; -extern int service_stop (char const *const *) ; - -extern int service (char const *const *) ; - - - /* main */ - -struct global_s -{ - unsigned int verbosity ; - s6f_confdirs dirs ; - stralloc userstorage ; - uint8_t isuser : 1 ; - uint8_t istty : 1 ; - uint8_t color : 1 ; -} ; -#define GLOBAL_ZERO \ -{ \ - .verbosity = 1, \ - .dirs = \ - { \ - .scan = S6_FRONTEND_SCANDIR, \ - .live = S6_FRONTEND_LIVEDIR, \ - .repo = S6_FRONTEND_REPODIR, \ - .boot = S6_FRONTEND_BOOTDIR, \ - .stmp = S6_FRONTEND_STMPDIR, \ - }, \ - .userstorage = STRALLOC_ZERO, \ - .isuser = 0, \ - .istty = 0, \ - .color = 0 \ -} - -struct command_s -{ - char const *s ; - main_func_ref f ; -} ; -#define COMMAND_ZERO { .s = 0, .f = 0 } - -extern struct global_s *g ; - -extern int version (char const *const *) ; - -#endif diff --git a/src/s6/s6.c b/src/s6/s6.c deleted file mode 100644 index e7ecd6f..0000000 --- a/src/s6/s6.c +++ /dev/null @@ -1,133 +0,0 @@ -/* ISC license. */ - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include "s6-internal.h" - -#define USAGE "s6 [ generic options ] command [ command options ] command_arguments... Type \"s6 help\" for details." -#define dieusage() strerr_dieusage(100, USAGE) - - -int version (char const *const *argv) -{ - (void)argv ; - if (!buffer_putsflush(buffer_1, "s6-frontend v" S6_FRONTEND_VERSION "\n")) - strerr_diefu1sys(111, "write to stdout") ; - return 0 ; -} - -enum golb_e -{ - GOLB_HELP, - GOLB_VERSION, - GOLB_USER, - GOLB_N -} ; - -enum gola_e -{ - GOLA_SCANDIR, - GOLA_LIVEDIR, - GOLA_REPODIR, - GOLA_BOOTDIR, - GOLA_STMPDIR, - GOLA_VERBOSITY, - GOLA_COLOR, - GOLA_N -} ; - -static gol_bool const rgolb[GOLB_N] = -{ - { .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 rgola[GOLA_N] = -{ - { .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 commands[] = -{ - { .s = "help", .f = &help }, - { .s = "process", .f = &process }, - { .s = "service", .f = &service }, - { .s = "version", .f = &version }, -} ; - -int main (int argc, char const *const *argv, char const *const *envp) -{ - struct global_s globals_in_the_stack = GLOBAL_ZERO ; - 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, rgolb, GOLB_N, rgola, GOLA_N, &wgolb, wgola) ; - argc -= golc ; argv += golc ; - - if (wgola[GOLA_VERBOSITY] && !uint0_scan(wgola[GOLA_VERBOSITY], &g->verbosity)) - strerr_dief1x(100, "verbosity must be an unsigned integer") ; - - 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 (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 (wgola[GOLA_COLOR]) - { - if (!strcmp(wgola[GOLA_COLOR], "yes")) - { - force_color = 1 ; - g->color = 1 ; - } - else if (!strcmp(wgola[GOLA_COLOR], "no")) - { - force_color = 1 ; - g->color = 0 ; - } - 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 = !!(wgolb & 1 << GOLB_USER) ; - if (g->isuser) s6f_user_get_confdirs(&g->dirs, &g->userstorage) ; - - if (!*argv) dieusage() ; - cmd = BSEARCH(struct command_s, *argv, commands) ; - if (!cmd) dieusage() ; - return (*cmd->f)(++argv) ; -} diff --git a/src/s6/service.c b/src/s6/service.c deleted file mode 100644 index 5ac453b..0000000 --- a/src/s6/service.c +++ /dev/null @@ -1,28 +0,0 @@ -/* ISC license. */ - -#include -#include - -#include "s6-internal.h" - -#define USAGE "s6 service [ service options ] subcommand [ subcommand options ] services... Type \"s6 service help\" for details." -#define dieusage() strerr_dieusage(100, USAGE) - -static struct command_s const service_commands[] = -{ - { .s = "help", .f = &service_help }, - { .s = "start", .f = &service_start }, - { .s = "status", .f = &service_status }, - { .s = "stop", .f = &service_stop }, -} ; - -int service (char const *const *argv) -{ - struct command_s *cmd ; - - PROG = "s6 service" ; - if (!*argv) dieusage() ; - cmd = BSEARCH(struct command_s, *argv, service_commands) ; - if (!cmd) dieusage() ; - return (*cmd->f)(++argv) ; -} diff --git a/src/s6/service_startstop.c b/src/s6/service_startstop.c deleted file mode 100644 index c4946fc..0000000 --- a/src/s6/service_startstop.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ISC license. */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "s6-internal.h" - -enum golb_e -{ - GOLB_DRYRUN, - GOLB_WAIT, - GOLB_N -} ; - -enum gola_e -{ - GOLA_TIMEOUT, - GOLA_N -} ; - -static gol_bool const rgolb[3] = -{ - { .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 rgola[GOLA_N] = -{ - { .so = 't', .lo = "timeout", .i = GOLA_TIMEOUT } -} ; - -static int service_startstop (char const *const *argv, int h) -{ - char const *wgola[GOLA_N] = { 0 } ; - uint64_t wgolb = 0 ; - unsigned int t = 0 ; - size_t argc = env_len(argv) ; - pid_t pid ; - int wstat ; - uint32_t nlong, nshort, n ; - int livelock, compiledlock ; - size_t livelen = strlen(g->dirs.live) ; - PROG = h ? "s6 service start" : "s6 service stop" ; - - 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 (wgola[GOLA_TIMEOUT]) - { - 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 */ - char dbfn[livelen + 10] ; - memcpy(dbfn, g->dirs.live, livelen) ; - memcpy(dbfn + livelen, "/compiled", 10) ; - if (!s6rc_lock(g->dirs.live, 2, &livelock, dbfn, 1, &compiledlock, 1)) - strerr_diefu2sys(111, "take lock in ", g->dirs.live) ; - if (!s6rc_live_state_size(g->dirs.live, &nlong, &nshort)) - strerr_diefu2sys(111, "read state size in ", g->dirs.live) ; - n = nlong + nshort ; - unsigned char oldstate[n] ; - if (!s6rc_live_state_read(g->dirs.live, oldstate, n)) - strerr_diefu2sys(111, "read state in ", g->dirs.live) ; - - { - size_t m = 0 ; - char const *newargv[13 + argc] ; - char fmtv[UINT_FMT] ; - char fmtt[UINT_FMT] ; - - newargv[m++] = S6RC_EXTBINPREFIX "s6-rc" ; - newargv[m++] = "-X" ; /* we already took the locks */ - newargv[m++] = "-v" ; - newargv[m++] = fmtv ; - fmtv[uint_fmt(fmtv, g->verbosity)] = 0 ; - if (t) - { - newargv[m++] = "-t" ; - newargv[m++] = fmtt ; - fmtt[uint_fmt(fmtt, t)] = 0 ; - } - if (wgolb & 1 << GOLB_DRYRUN) - { - newargv[m++] = "-n" ; - newargv[m++] = "1" ; - } - newargv[m++] = "-l" ; - newargv[m++] = g->dirs.live ; - newargv[m++] = "--" ; - 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) ; - if (!pid) strerr_diefu2sys(111, "spawn ", newargv[0]) ; - } - if (wait_pid(pid, &wstat) <= 0) strerr_diefu1sys(111, "wait for s6-rc") ; - if ((WIFEXITED(wstat) && !WEXITSTATUS(wstat)) || !g->verbosity) - return wait_estatus(wstat) ; - - 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, 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 deleted file mode 100644 index 5bf71b5..0000000 --- a/src/s6/service_status.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ISC license. */ - -#include -#include -#include - -#include "s6-internal.h" - -#define USAGE "s6 service status services..." -#define dieusage() strerr_dieusage(100, USAGE) - -enum golb_e -{ - GOLB_WAIT, - GOLB_N -} ; - -static gol_bool const rgolb[2] = -{ - { .so = 'w', .lo = "wait", .clear = 0, .set = 1 << GOLB_WAIT } -} ; - -int service_status (char const *const *argv) -{ - uint64_t wgolb = 0 ; - PROG = "s6 service status" ; - - argv += gol_argv(argv, rgolb, 0, 0, 0, &wgolb, 0) ; - if (!argv) dieusage() ; - return 0 ; -} diff --git a/src/s6/util.c b/src/s6/util.c deleted file mode 100644 index 699f976..0000000 --- a/src/s6/util.c +++ /dev/null @@ -1,15 +0,0 @@ -/* ISC license. */ - -#include - -#include "s6-internal.h" - -struct starts_with_a_string_key_s -{ - char const *s ; -} ; - -int keycmp (void const *a, void const *b) -{ - return strcmp((char const *)a, ((struct starts_with_a_string_key_s const *)b)->s) ; -} -- cgit v1.3.1