diff options
| -rw-r--r-- | src/s6-frontend/live.help.txt | 1 | ||||
| -rw-r--r-- | src/s6-frontend/live_install.c | 13 | ||||
| -rw-r--r-- | src/s6-frontend/set_apply.c | 13 | ||||
| -rw-r--r-- | src/s6-frontend/set_change.c | 5 | ||||
| -rw-r--r-- | src/s6-frontend/set_check.c | 11 | ||||
| -rw-r--r-- | src/s6-frontend/set_commit.c | 11 | ||||
| -rw-r--r-- | src/s6-frontend/set_list.c | 11 | ||||
| -rw-r--r-- | src/s6-frontend/set_status.c | 3 |
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) ; |
