aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/s6-frontend/live.help.txt1
-rw-r--r--src/s6-frontend/live_install.c13
-rw-r--r--src/s6-frontend/set_apply.c13
-rw-r--r--src/s6-frontend/set_change.c5
-rw-r--r--src/s6-frontend/set_check.c11
-rw-r--r--src/s6-frontend/set_commit.c11
-rw-r--r--src/s6-frontend/set_list.c11
-rw-r--r--src/s6-frontend/set_status.c3
8 files changed, 44 insertions, 24 deletions
diff --git a/src/s6-frontend/live.help.txt b/src/s6-frontend/live.help.txt
index bc737a2..70d46e0 100644
--- a/src/s6-frontend/live.help.txt
+++ b/src/s6-frontend/live.help.txt
@@ -26,6 +26,7 @@ s6 live install options:
-E --no-force-essentials keep obsolete essential services up
-f FILE --conversion-file=FILE use a conversion file from current to new set
--init install the initial db. DO NOT USE WHEN LIVE.
+Takes a set name as an optional argument (default: current)
s6 live start-everything options:
-n --dry-run only show what would be done, don't do it
diff --git a/src/s6-frontend/live_install.c b/src/s6-frontend/live_install.c
index ec99707..2b64774 100644
--- a/src/s6-frontend/live_install.c
+++ b/src/s6-frontend/live_install.c
@@ -20,7 +20,6 @@ enum golb_e
enum gola_e
{
GOLA_CONVFILE,
- GOLA_SET,
GOLA_N
} ;
@@ -39,17 +38,23 @@ void live_install (char const *const *argv)
static gol_arg const rgola[] =
{
{ .so = 'f', .lo = "conversion-file", .i = GOLA_CONVFILE },
- { .so = 's', .lo = "set", .i = GOLA_SET },
} ;
uint64_t wgolb = 0 ;
unsigned int m = 0 ;
char const *wgola[GOLA_N] = { 0 } ;
+ char const *set = "current" ;
char const *newargv[19] ;
char fmtv[UINT_FMT] ;
- wgola[GOLA_SET] = "current" ;
argv += GOL_argv(argv, rgolb, rgola, &wgolb, wgola) ;
+ if (argv[0])
+ {
+ if (argv[0][0] == '.' || strchr(argv[0], '/') || strchr(argv[0], '\n'))
+ strerr_dief(100, "invalid set name: ", argv[0]) ;
+ set = argv[0] ;
+ }
+
newargv[m++] = S6RC_EXTBINPREFIX "s6-rc-set-install" ;
if (g->verbosity != 1)
{
@@ -82,7 +87,7 @@ void live_install (char const *const *argv)
newargv[m++] = "--no-snapshot" ;
}
newargv[m++] = "--" ;
- newargv[m++] = wgola[GOLA_SET] ;
+ newargv[m++] = set ;
newargv[m++] = 0 ;
main_exec(newargv) ;
}
diff --git a/src/s6-frontend/set_apply.c b/src/s6-frontend/set_apply.c
index 9de9e01..d6ecb3b 100644
--- a/src/s6-frontend/set_apply.c
+++ b/src/s6-frontend/set_apply.c
@@ -44,7 +44,7 @@ void set_apply (char const *const *argv)
pid_t pid ;
char const *wgola[GOLA_N] = { 0 } ;
size_t slen = strlen(g->dirs.scan) ;
- char const *set ;
+ char const *set = "current" ;
char const *newargv[16] ;
char fmtv[UINT_FMT] ;
char fmtt[UINT_FMT] ;
@@ -54,16 +54,19 @@ void set_apply (char const *const *argv)
argv += GOL_argv(argv, rgolb, rgola, &wgolb, wgola) ;
+ if (argv[0])
+ {
+ if (argv[0][0] == '.' || strchr(argv[0], '/') || strchr(argv[0], '\n'))
+ strerr_dief(100, "invalid set name: ", argv[0]) ;
+ set = argv[0] ;
+ }
+
if (wgola[GOLA_TIMEOUT])
{
if (!uint0_scan(wgola[GOLA_TIMEOUT], &timeout))
strerr_dief1x(100, "timeout must be an integer (milliseconds)") ;
}
- set = *argv ? *argv : "current" ;
- if (set[0] == '.' || strchr(set, '/') || strchr(set, '\n'))
- strerr_dief(100, "invalid set name: ", set) ;
-
memcpy(catchall, g->dirs.scan, slen) ;
memcpy(catchall + slen, "/s6-svscan-log", 15) ;
diff --git a/src/s6-frontend/set_change.c b/src/s6-frontend/set_change.c
index deefe5e..1ea3316 100644
--- a/src/s6-frontend/set_change.c
+++ b/src/s6-frontend/set_change.c
@@ -39,10 +39,11 @@ static void set_change (char const *const *argv, char const *newrx, char const *
{ .so = 's', .lo = "set", .i = GOLA_SET },
} ;
uint64_t wgolb = 0 ;
- char const *wgola[GOLA_N] = { [GOLA_SET] = "current" } ;
+ char const *wgola[GOLA_N] = { 0 } ;
unsigned int m = 0 ;
-
unsigned int argc ;
+ wgola[GOLA_SET] = "current" ;
+
argv += GOL_argv(argv, rgolb, rgola, &wgolb, wgola) ;
if (!*argv) strerr_die(100, "usage: ", "s6 set ", cmd, " [ --dry-run ] [ --fail-on-dependencies | --pull-dependencies ] [ --set=setname ] services...") ;
diff --git a/src/s6-frontend/set_check.c b/src/s6-frontend/set_check.c
index 41226e5..1025d64 100644
--- a/src/s6-frontend/set_check.c
+++ b/src/s6-frontend/set_check.c
@@ -31,15 +31,18 @@ void set_check (char const *const *argv)
} ;
uint64_t wgolb = 0 ;
unsigned int m = 0 ;
- char const *set ;
+ char const *set = "current" ;
char const *newargv[11] ;
char fmtv[UINT_FMT] ;
argv += gol_argv(argv, rgolb, sizeof(rgolb)/sizeof(gol_bool), 0, 0, &wgolb, 0) ;
- set = *argv ? *argv : "current" ;
- if (set[0] == '.' || strchr(set, '/') || strchr(set, '\n'))
- strerr_dief(100, "invalid set name: ", set) ;
+ if (argv[0])
+ {
+ if (argv[0][0] == '.' || strchr(argv[0], '/') || strchr(argv[0], '\n'))
+ strerr_dief(100, "invalid set name: ", argv[0]) ;
+ set = argv[0] ;
+ }
newargv[m++] = S6RC_EXTBINPREFIX "s6-rc-set-fix" ;
if (g->verbosity != 1)
diff --git a/src/s6-frontend/set_commit.c b/src/s6-frontend/set_commit.c
index 00bdc0f..ba7d51e 100644
--- a/src/s6-frontend/set_commit.c
+++ b/src/s6-frontend/set_commit.c
@@ -40,7 +40,7 @@ void set_commit (char const *const *argv)
unsigned int m = 0 ;
size_t slen = strlen(g->dirs.scan) ;
char const *wgola[GOLA_N] = { 0 } ;
- char const *set ;
+ char const *set = "current" ;
char const *newargv[17] ;
char fmtv[UINT_FMT] ;
char catchall[slen + 15] ;
@@ -48,9 +48,12 @@ void set_commit (char const *const *argv)
wgola[GOLA_DEFBUNDLE] = S6_FRONTEND_DEFBUNDLE ;
argv += GOL_argv(argv, rgolb, rgola, &wgolb, wgola) ;
- set = *argv ? *argv : "current" ;
- if (set[0] == '.' || strchr(set, '/') || strchr(set, '\n'))
- strerr_dief(100, "invalid set name: ", set) ;
+ if (argv[0])
+ {
+ if (argv[0][0] == '.' || strchr(argv[0], '/') || strchr(argv[0], '\n'))
+ strerr_dief(100, "invalid set name: ", argv[0]) ;
+ set = argv[0] ;
+ }
memcpy(catchall, g->dirs.scan, slen) ;
memcpy(catchall + slen, "/s6-svscan-log", 15) ;
diff --git a/src/s6-frontend/set_list.c b/src/s6-frontend/set_list.c
index 77df219..16f710e 100644
--- a/src/s6-frontend/set_list.c
+++ b/src/s6-frontend/set_list.c
@@ -25,15 +25,18 @@ void set_list (char const *const *argv)
} ;
uint64_t wgolb = 0 ;
unsigned int m = 0 ;
- char const *set ;
+ char const *set = "current" ;
char const *newargv[10] ;
char fmtv[UINT_FMT] ;
argv += gol_argv(argv, rgolb, sizeof(rgolb)/sizeof(gol_bool), 0, 0, &wgolb, 0) ;
- set = *argv ? *argv : "current" ;
- if (set[0] == '.' || strchr(set, '/') || strchr(set, '\n'))
- strerr_dief(100, "invalid set name: ", set) ;
+ if (argv[0])
+ {
+ if (argv[0][0] == '.' || strchr(argv[0], '/') || strchr(argv[0], '\n'))
+ strerr_dief(100, "invalid set name: ", argv[0]) ;
+ set = argv[0] ;
+ }
newargv[m++] = S6RC_EXTBINPREFIX "s6-rc-set-status" ;
fmtv[uint_fmt(fmtv, g->verbosity)] = 0 ;
diff --git a/src/s6-frontend/set_status.c b/src/s6-frontend/set_status.c
index 8f397b8..fe75955 100644
--- a/src/s6-frontend/set_status.c
+++ b/src/s6-frontend/set_status.c
@@ -34,10 +34,11 @@ void set_status (char const *const *argv)
{ .so = 's', .lo = "set", .i = GOLA_SET },
} ;
uint64_t wgolb = 0 ;
- char const *wgola[GOLA_N] = { [GOLA_SET] = "current" } ;
+ char const *wgola[GOLA_N] = { 0 } ;
unsigned int m = 0 ;
unsigned int argc ;
char fmtv[UINT_FMT] = " " ;
+ wgola[GOLA_SET] = "current" ;
argv += GOL_argv(argv, rgolb, rgola, &wgolb, wgola) ;
argc = env_len(argv) ;