aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-01-20 06:45:22 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-01-20 06:45:22 +0000
commitd9436b64e8e63b2648da26814c0e58e539948bdd (patch)
tree11c2791ff20db1bc290399bce430cd43aeed5037
parent7b721d760c3238ff4a40dc7e5934dfa97dd7852c (diff)
downloads6-frontend-d9436b64e8e63b2648da26814c0e58e539948bdd.tar.gz
Batch of fixes!
-rw-r--r--src/s6-frontend/live_start_everything.c5
-rw-r--r--src/s6-frontend/live_startstop.c3
-rw-r--r--src/s6-frontend/live_status.c8
-rw-r--r--src/s6-frontend/process_status.c3
-rw-r--r--src/s6-frontend/repository_init.c3
-rw-r--r--src/s6-frontend/s6-frontend-internal.h23
-rw-r--r--src/s6-frontend/s6-frontend.c21
-rw-r--r--src/s6-frontend/system_boot.c3
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))