diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2025-03-12 13:18:32 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2025-03-12 23:08:33 +0100 |
commit | 4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4 (patch) | |
tree | 0d7030f88633e0c4916454c05dfc117f8e7fdff8 | |
parent | bb00a0499fc9130e4b00a88928958b8b094ee2c9 (diff) | |
download | passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar.gz passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar.bz2 passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar.lz passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar.xz passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.tar.zst passt-4b17d042c7e4f6e5b5a770181e2ebd53ec8e73d4.zip |
conf: Move mode detection into helper function
One of the first things we need to do is determine if we're in passt mode
or pasta mode. Currently this is open-coded in main(), by examining
argv[0]. We want to complexify this a bit in future to cover vhost-user
mode as well. Prepare for this, by moving the mode detection into a new
conf_mode() function.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | conf.c | 26 | ||||
-rw-r--r-- | conf.h | 1 | ||||
-rw-r--r-- | passt.c | 14 |
3 files changed, 29 insertions, 12 deletions
@@ -992,6 +992,32 @@ pasta_opts: } /** + * conf_mode() - Determine passt/pasta's operating mode from command line + * @argc: Argument count + * @argv: Command line arguments + * + * Return: mode to operate in, PASTA or PASST + */ +/* cppcheck-suppress constParameter */ +enum passt_modes conf_mode(int argc, char *argv[]) +{ + char argv0[PATH_MAX], *basearg0; + + if (argc < 1) + die("Cannot determine argv[0]"); + + strncpy(argv0, argv[0], PATH_MAX - 1); + basearg0 = basename(argv0); + if (strstr(basearg0, "pasta")) + return MODE_PASTA; + + if (strstr(basearg0, "passt")) + return MODE_PASST; + + die("Cannot determine mode, invoke as \"passt\" or \"pasta\""); +} + +/** * conf_print() - Print fundamental configuration parameters * @c: Execution context */ @@ -6,6 +6,7 @@ #ifndef CONF_H #define CONF_H +enum passt_modes conf_mode(int argc, char *argv[]); void conf(struct ctx *c, int argc, char **argv); #endif /* CONF_H */ @@ -191,7 +191,6 @@ int main(int argc, char **argv) { struct epoll_event events[EPOLL_EVENTS]; int nfds, i, devnull_fd = -1; - char argv0[PATH_MAX], *name; struct ctx c = { 0 }; struct rlimit limit; struct timespec now; @@ -213,21 +212,12 @@ int main(int argc, char **argv) sigaction(SIGTERM, &sa, NULL); sigaction(SIGQUIT, &sa, NULL); - if (argc < 1) - _exit(EXIT_FAILURE); + c.mode = conf_mode(argc, argv); - strncpy(argv0, argv[0], PATH_MAX - 1); - name = basename(argv0); - if (strstr(name, "pasta")) { + if (c.mode == MODE_PASTA) { sa.sa_handler = pasta_child_handler; if (sigaction(SIGCHLD, &sa, NULL)) die_perror("Couldn't install signal handlers"); - - c.mode = MODE_PASTA; - } else if (strstr(name, "passt")) { - c.mode = MODE_PASST; - } else { - _exit(EXIT_FAILURE); } if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) |