From ed586164105039c1c5b1e6da71f9a6c1ba82adf8 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 25 Mar 2020 12:46:02 +0100 Subject: [PATCH] lxc_init: move main() down Signed-off-by: Christian Brauner --- src/lxc/cmd/lxc_init.c | 189 ++++++++++++++++++++--------------------- 1 file changed, 93 insertions(+), 96 deletions(-) diff --git a/src/lxc/cmd/lxc_init.c b/src/lxc/cmd/lxc_init.c index 10fe64f2b..24f67f081 100644 --- a/src/lxc/cmd/lxc_init.c +++ b/src/lxc/cmd/lxc_init.c @@ -70,9 +70,6 @@ struct arguments { int argc; }; -static int arguments_parse(struct arguments *my_args, int argc, - char *const argv[]); - static struct arguments my_args = { .options = long_options, .shortopts = short_options @@ -191,6 +188,99 @@ static void remove_self(void) return; } +__noreturn static void print_usage_exit(const struct option longopts[]) + +{ + fprintf(stderr, "Usage: lxc-init [-n|--name=NAME] [-h|--help] [--usage] [--version]\n\ + [-q|--quiet] [-P|--lxcpath=LXCPATH]\n"); + exit(EXIT_SUCCESS); +} + +__noreturn static void print_version_exit(void) +{ + printf("%s\n", LXC_VERSION); + exit(EXIT_SUCCESS); +} + +static void print_help(void) +{ + fprintf(stderr, "\ +Usage: lxc-init --name=NAME -- COMMAND\n\ +\n\ + lxc-init start a COMMAND as PID 2 inside a container\n\ +\n\ +Options :\n\ + -n, --name=NAME NAME of the container\n\ + -q, --quiet Don't produce any output\n\ + -P, --lxcpath=PATH Use specified container path\n\ + -?, --help Give this help list\n\ + --usage Give a short usage message\n\ + --version Print the version number\n\ +\n\ +Mandatory or optional arguments to long options are also mandatory or optional\n\ +for any corresponding short options.\n\ +\n\ +See the lxc-init man page for further information.\n\n"); +} + +static int arguments_parse(struct arguments *args, int argc, + char *const argv[]) +{ + for (;;) { + int c; + int index = 0; + + c = getopt_long(argc, argv, args->shortopts, args->options, &index); + if (c == -1) + break; + switch (c) { + case 'n': + args->name = optarg; + break; + case 'o': + break; + case 'l': + break; + case 'q': + args->quiet = true; + break; + case 'P': + remove_trailing_slashes(optarg); + args->lxcpath = optarg; + break; + case OPT_USAGE: + print_usage_exit(args->options); + case OPT_VERSION: + print_version_exit(); + case '?': + print_help(); + exit(EXIT_FAILURE); + case 'h': + print_help(); + exit(EXIT_SUCCESS); + } + } + + /* + * Reclaim the remaining command arguments + */ + args->argv = &argv[optind]; + args->argc = argc - optind; + + /* If no lxcpath was given, use default */ + if (!args->lxcpath) + args->lxcpath = lxc_global_config_value("lxc.lxcpath"); + + /* Check the command options */ + if (!args->name) { + if (!args->quiet) + fprintf(stderr, "lxc-init: missing container name, use --name option\n"); + return -1; + } + + return 0; +} + int main(int argc, char *argv[]) { int i, logfd, ret; @@ -426,96 +516,3 @@ out: exit(EXIT_FAILURE); exit(exit_with); } - -__noreturn static void print_usage_exit(const struct option longopts[]) - -{ - fprintf(stderr, "Usage: lxc-init [-n|--name=NAME] [-h|--help] [--usage] [--version]\n\ - [-q|--quiet] [-P|--lxcpath=LXCPATH]\n"); - exit(EXIT_SUCCESS); -} - -__noreturn static void print_version_exit(void) -{ - printf("%s\n", LXC_VERSION); - exit(EXIT_SUCCESS); -} - -static void print_help(void) -{ - fprintf(stderr, "\ -Usage: lxc-init --name=NAME -- COMMAND\n\ -\n\ - lxc-init start a COMMAND as PID 2 inside a container\n\ -\n\ -Options :\n\ - -n, --name=NAME NAME of the container\n\ - -q, --quiet Don't produce any output\n\ - -P, --lxcpath=PATH Use specified container path\n\ - -?, --help Give this help list\n\ - --usage Give a short usage message\n\ - --version Print the version number\n\ -\n\ -Mandatory or optional arguments to long options are also mandatory or optional\n\ -for any corresponding short options.\n\ -\n\ -See the lxc-init man page for further information.\n\n"); -} - -static int arguments_parse(struct arguments *args, int argc, - char *const argv[]) -{ - for (;;) { - int c; - int index = 0; - - c = getopt_long(argc, argv, args->shortopts, args->options, &index); - if (c == -1) - break; - switch (c) { - case 'n': - args->name = optarg; - break; - case 'o': - break; - case 'l': - break; - case 'q': - args->quiet = true; - break; - case 'P': - remove_trailing_slashes(optarg); - args->lxcpath = optarg; - break; - case OPT_USAGE: - print_usage_exit(args->options); - case OPT_VERSION: - print_version_exit(); - case '?': - print_help(); - exit(EXIT_FAILURE); - case 'h': - print_help(); - exit(EXIT_SUCCESS); - } - } - - /* - * Reclaim the remaining command arguments - */ - args->argv = &argv[optind]; - args->argc = argc - optind; - - /* If no lxcpath was given, use default */ - if (!args->lxcpath) - args->lxcpath = lxc_global_config_value("lxc.lxcpath"); - - /* Check the command options */ - if (!args->name) { - if (!args->quiet) - fprintf(stderr, "lxc-init: missing container name, use --name option\n"); - return -1; - } - - return 0; -} -- 2.47.2