diff options
Diffstat (limited to 'cmd/runsvc')
-rw-r--r-- | cmd/runsvc/runsvc.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/cmd/runsvc/runsvc.c b/cmd/runsvc/runsvc.c index fdece64..794aa29 100644 --- a/cmd/runsvc/runsvc.c +++ b/cmd/runsvc/runsvc.c @@ -1,12 +1,15 @@ /* SPDX-License-Identifier: ISC */ #include "runsvc.h" -static int runlst_wait(exec_t *list) +static int run_sequentially(exec_t *list) { pid_t ret, pid; int status; for (; list != NULL; list = list->next) { + if (list->next == NULL) + argv_exec(list); + pid = fork(); if (pid == 0) @@ -35,46 +38,35 @@ static int runlst_wait(exec_t *list) int main(int argc, char **argv) { - int dirfd, ret = EXIT_FAILURE; service_t *svc = NULL; + int dirfd; if (argc != 3) { fputs("usage: runsvc <directory> <filename>\n", stderr); - goto out; + return EXIT_FAILURE; } if (getppid() != 1) { fputs("must be run by init!\n", stderr); - goto out; + return EXIT_FAILURE; } dirfd = open(argv[1], O_RDONLY | O_DIRECTORY); if (dirfd < 0) { perror(argv[1]); - goto out; + return EXIT_FAILURE; } svc = rdsvc(dirfd, argv[2], RDSVC_NO_FNAME | RDSVC_NO_DEPS); close(dirfd); if (svc == NULL) - goto out; - - if (svc->exec == NULL) { - ret = EXIT_SUCCESS; - goto out; - } + return EXIT_FAILURE; if (initenv()) - goto out; + return EXIT_FAILURE; if (setup_tty(svc->ctty, (svc->flags & SVC_FLAG_TRUNCATE_OUT) != 0)) - goto out; - - if (svc->exec->next == NULL) - argv_exec(svc->exec); + return EXIT_FAILURE; - ret = runlst_wait(svc->exec); -out: - delsvc(svc); - return ret; + return run_sequentially(svc->exec); } |