diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-01-20 06:45:22 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-01-20 06:45:22 +0000 |
| commit | d9436b64e8e63b2648da26814c0e58e539948bdd (patch) | |
| tree | 11c2791ff20db1bc290399bce430cd43aeed5037 | |
| parent | 7b721d760c3238ff4a40dc7e5934dfa97dd7852c (diff) | |
| download | s6-frontend-d9436b64e8e63b2648da26814c0e58e539948bdd.tar.gz | |
Batch of fixes!
| -rw-r--r-- | src/s6-frontend/live_start_everything.c | 5 | ||||
| -rw-r--r-- | src/s6-frontend/live_startstop.c | 3 | ||||
| -rw-r--r-- | src/s6-frontend/live_status.c | 8 | ||||
| -rw-r--r-- | src/s6-frontend/process_status.c | 3 | ||||
| -rw-r--r-- | src/s6-frontend/repository_init.c | 3 | ||||
| -rw-r--r-- | src/s6-frontend/s6-frontend-internal.h | 23 | ||||
| -rw-r--r-- | src/s6-frontend/s6-frontend.c | 21 | ||||
| -rw-r--r-- | src/s6-frontend/system_boot.c | 3 |
8 files changed, 29 insertions, 40 deletions
diff --git a/src/s6-frontend/live_start_everything.c b/src/s6-frontend/live_start_everything.c index 4e6bcf9..2f971e9 100644 --- a/src/s6-frontend/live_start_everything.c +++ b/src/s6-frontend/live_start_everything.c @@ -1,14 +1,9 @@ /* ISC license. */ -#include <unistd.h> -#include <sys/wait.h> - #include <skalibs/uint64.h> #include <skalibs/types.h> #include <skalibs/strerr.h> #include <skalibs/gol.h> -#include <skalibs/cspawn.h> -#include <skalibs/djbunix.h> #include <s6-frontend/config.h> #include "s6-frontend-internal.h" diff --git a/src/s6-frontend/live_startstop.c b/src/s6-frontend/live_startstop.c index e1d795b..52fea93 100644 --- a/src/s6-frontend/live_startstop.c +++ b/src/s6-frontend/live_startstop.c @@ -10,7 +10,6 @@ #include <skalibs/strerr.h> #include <skalibs/gol.h> #include <skalibs/env.h> -#include <skalibs/cspawn.h> #include <skalibs/djbunix.h> #include <s6-rc/config.h> @@ -83,7 +82,7 @@ static int run_s6rc_change (char const *const *services, unsigned int n, int h, argv[m++] = h ? "start" : "stop" ; while (*services) argv[m++] = *services++ ; argv[m++] = 0 ; - pid = cspawn(argv[0], argv, (char const *const *)environ, CSPAWN_FLAGS_SIGBLOCKNONE, 0, 0) ; + pid = main_spawn(argv) ; if (!pid) strerr_diefu2sys(111, "spawn ", argv[0]) ; if (wait_pid(pid, &wstat) <= 0) strerr_diefu1sys(111, "wait for s6-rc") ; if (wait_estatus(wstat) && g->verbosity) diff --git a/src/s6-frontend/live_status.c b/src/s6-frontend/live_status.c index 4a7711a..ef584b4 100644 --- a/src/s6-frontend/live_status.c +++ b/src/s6-frontend/live_status.c @@ -66,6 +66,7 @@ static int get_list_of_up (stralloc *storage, int withe) int fd ; int wstat ; char const *argv[7] = { S6RC_EXTBINPREFIX "s6-rc", "-l", g->dirs.live, withe ? "-baE" : "-bae", "--", "list", 0 } ; + /* XXX: runs with a modified env, but we know it doesn't matter for s6-rc */ pid_t pid = child_spawn1_pipe(argv[0], argv, (char const *const *)environ, &fd, 1) ; if (!pid) { strerr_warnfu2sys("spawn ", argv[0]) ; return 111 ; } if (!slurpn(fd, storage, 0)) { strerr_warnfu2sys("read output from ", argv[0]) ; return 111 ; } @@ -107,6 +108,7 @@ static int get_atomics (char const *const *services, unsigned int n, stralloc *s argv[m++] = "atomics" ; for (unsigned int i = 0 ; i < n ; i++) argv[m++] = services[i] ; argv[m++] = 0 ; + /* XXX: runs with a modified env, but we know it doesn't matter for s6-rc-db */ pid = child_spawn1_pipe(argv[0], argv, (char const *const *)environ, &fd, 1) ; if (!pid) { strerr_warnfu2sys("spawn ", argv[0]) ; return 111 ; } if (!slurpn(fd, storage, 0)) { strerr_warnfu2sys("read output from ", argv[0]) ; return 111 ; } @@ -138,7 +140,7 @@ static void live_status_some (char const *const *services, int withe) unsigned int m = 0 ; size_t uplistpos ; int e ; - char const *argv[55] ; + char const *argv[57] ; if (!stralloc_catb(&sa, " ", 1)) dienomem() ; e = get_atomics(services, env_len(services), &sa, withe) ; if (e) _exit(e) ; @@ -159,6 +161,7 @@ static void live_status_some (char const *const *services, int withe) argv[m++] = " 1" ; argv[m++] = " 4" ; argv[m++] = " " S6_FRONTEND_LIBEXECPREFIX "s6-frontend-helper-echo" ; + argv[m++] = " -n" ; argv[m++] = " --" ; argv[m++] = sa.s + uplistpos - 2 ; argv[m++] = " " ; @@ -186,6 +189,7 @@ static void live_status_some (char const *const *services, int withe) argv[m++] = " 1" ; argv[m++] = " 4" ; argv[m++] = " " S6_FRONTEND_LIBEXECPREFIX "s6-frontend-helper-echo" ; + argv[m++] = " -n" ; argv[m++] = " --" ; argv[m++] = sa.s + uplistpos - 1 ; argv[m++] = "" ; @@ -196,7 +200,7 @@ static void live_status_some (char const *const *services, int withe) argv[m++] = sa.s + 1 ; argv[m++] = EXECLINE_EXTBINPREFIX "pipeline" ; argv[m++] = " grep" ; - argv[m++] = " -Fx" ; + argv[m++] = " -vFx" ; argv[m++] = " -f" ; argv[m++] = " /dev/fd/3" ; argv[m++] = "" ; diff --git a/src/s6-frontend/process_status.c b/src/s6-frontend/process_status.c index d639cdc..e020b68 100644 --- a/src/s6-frontend/process_status.c +++ b/src/s6-frontend/process_status.c @@ -11,7 +11,6 @@ #include <skalibs/buffer.h> #include <skalibs/strerr.h> #include <skalibs/gol.h> -#include <skalibs/cspawn.h> #include <skalibs/djbunix.h> #include <s6/config.h> @@ -25,7 +24,7 @@ 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) ; + pid_t pid = main_spawn(argv) ; if (!pid) { if (g->verbosity) strerr_warnwu2sys("spawn ", argv[0]) ; diff --git a/src/s6-frontend/repository_init.c b/src/s6-frontend/repository_init.c index 7732154..747c481 100644 --- a/src/s6-frontend/repository_init.c +++ b/src/s6-frontend/repository_init.c @@ -7,7 +7,6 @@ #include <skalibs/uint64.h> #include <skalibs/types.h> #include <skalibs/envexec.h> -#include <skalibs/cspawn.h> #include <skalibs/djbunix.h> #include <s6-rc/config.h> @@ -82,7 +81,7 @@ void repository_init (char const *const *argv) else { int wstat ; - pid_t pid = xmspawn_n(newargv, cleanup_modif.s, cleanup_modif.len, cleanup_modif.n, 0, 0, 0) ; + pid_t pid = main_spawn(newargv) ; if (wait_pid(pid, &wstat) == -1) strerr_diefu1sys(111, "wait_pid") ; if (wait_estatus(wstat)) _exit(wait_estatus(wstat)) ; m = 0 ; diff --git a/src/s6-frontend/s6-frontend-internal.h b/src/s6-frontend/s6-frontend-internal.h index 42ab11b..d763024 100644 --- a/src/s6-frontend/s6-frontend-internal.h +++ b/src/s6-frontend/s6-frontend-internal.h @@ -3,8 +3,8 @@ #ifndef S6_FRONTEND_INTERNAL_H #define S6_FRONTEND_INTERNAL_H -#include <stddef.h> #include <stdint.h> +#include <unistd.h> #include <stdlib.h> #include <skalibs/gccattributes.h> @@ -102,11 +102,6 @@ extern void system_reboot (char const *const *) gccattr_noreturn ; /* main */ -extern void main_help (char const *const *) gccattr_noreturn ; -extern void main_version (char const *const *) gccattr_noreturn ; -extern void main_exec (char const *const *) gccattr_noreturn ; -extern void main_pretty_exec (char const *const *) gccattr_noreturn ; - struct global_s { unsigned int verbosity ; @@ -134,15 +129,6 @@ struct global_s .color = 0 \ } -struct modif_s -{ - char const *s ; - size_t len ; - unsigned int n ; -} ; - -extern struct modif_s const cleanup_modif ; - typedef void command_func (char const *const *) ; typedef command_func *command_func_ref ; @@ -155,4 +141,11 @@ struct command_s extern struct global_s *g ; +extern void main_exec (char const *const *) gccattr_noreturn ; +extern void main_pretty_exec (char const *const *) gccattr_noreturn ; +extern pid_t main_spawn (char const *const *argv) ; + +extern void main_help (char const *const *) gccattr_noreturn ; +extern void main_version (char const *const *) gccattr_noreturn ; + #endif diff --git a/src/s6-frontend/s6-frontend.c b/src/s6-frontend/s6-frontend.c index 8fe6428..228abe4 100644 --- a/src/s6-frontend/s6-frontend.c +++ b/src/s6-frontend/s6-frontend.c @@ -7,6 +7,7 @@ #include <skalibs/types.h> #include <skalibs/buffer.h> #include <skalibs/envexec.h> +#include <skalibs/cspawn.h> #include <execline/config.h> @@ -19,19 +20,13 @@ #define USAGE "s6 [ generic options ] command [ command options ] command_arguments... Type \"s6 help\" for details." #define dieusage() strerr_dieusage(100, USAGE) -#define CLEANUP_MODIF "scandir\0livedir\0repodir\0bootdb\0stmpdir\0verbosity\0defaultbundle" -struct modif_s const cleanup_modif = -{ - .s = CLEANUP_MODIF, - .len = sizeof(CLEANUP_MODIF), - .n = 6 -} ; +#define CLEANUP_MODIF "scandir\0livedir\0repodir\0bootdb\0stmpdir\0storelist\0verbosity" enum golb_e { GOLB_HELP = 0x01, GOLB_VERSION = 0x02, - GOLB_USER = 0x04, +// GOLB_USER = 0x04, } ; enum gola_e @@ -49,9 +44,14 @@ enum gola_e struct global_s *g ; +pid_t main_spawn (char const *const *argv) +{ + return xmspawn_m(argv, CLEANUP_MODIF, sizeof(CLEANUP_MODIF), 0, 0, 0) ; +} + void main_exec (char const *const *argv) { - xmexec_n(argv, cleanup_modif.s, cleanup_modif.len, cleanup_modif.n) ; + xmexec_m(argv, CLEANUP_MODIF, sizeof(CLEANUP_MODIF)) ; } void main_pretty_exec (char const *const *argv) @@ -133,7 +133,7 @@ int main (int argc, char const *const *argv) if (wgolb & GOLB_VERSION) main_version(argv) ; if (wgolb & GOLB_HELP) main_help(argv) ; - if (wgolb & (GOLB_VERSION | GOLB_HELP)) return 0 ; + if (wgolb & (GOLB_VERSION | GOLB_HELP)) _exit(0) ; if (wgola[GOLA_SCANDIR]) g->dirs.scan = wgola[GOLA_SCANDIR] ; if (wgola[GOLA_LIVEDIR]) g->dirs.live = wgola[GOLA_LIVEDIR] ; @@ -170,4 +170,5 @@ int main (int argc, char const *const *argv) cmd = BSEARCH(struct command_s, *argv, commands) ; if (!cmd) dieusage() ; (*cmd->f)(++argv) ; + _exit(101) ; /* not reached */ } diff --git a/src/s6-frontend/system_boot.c b/src/s6-frontend/system_boot.c index 49dd2bf..73488de 100644 --- a/src/s6-frontend/system_boot.c +++ b/src/s6-frontend/system_boot.c @@ -6,7 +6,6 @@ #include <skalibs/uint64.h> #include <skalibs/types.h> #include <skalibs/envexec.h> -#include <skalibs/cspawn.h> #include <skalibs/djbunix.h> #include <s6-frontend/config.h> @@ -70,7 +69,7 @@ static void system_init_spawn (char const *prefix) int wstat ; char const *newargv[13] ; system_init_fill(newargv, prefix) ; - pid = xmspawn_n(newargv, cleanup_modif.s, cleanup_modif.len, cleanup_modif.n, 0, 0, 0) ; + pid = main_spawn(newargv) ; if (wait_pid(pid, &wstat) == -1) strerr_diefu2sys(111, "wait for ", newargv[0]) ; if (wait_estatus(wstat)) |
