From: Michel Normand Date: Mon, 18 May 2009 20:11:45 +0000 (+0200) Subject: add long options step2 X-Git-Tag: lxc_0_6_3~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9618063c87c64f9d8b154ef539c644c7ec382339;p=thirdparty%2Flxc.git add long options step2 add the long options to lxc-start with a small change in lxc_start proto to avoid compilation warning Signed-off-by: Michel Normand Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h index f17a9060d..7507ef5b4 100644 --- a/src/lxc/lxc.h +++ b/src/lxc/lxc.h @@ -72,7 +72,7 @@ extern int lxc_destroy(const char *name); * @argv : an array of char * corresponding to the commande line * Returns 0 on sucess, < 0 otherwise */ -extern int lxc_start(const char *name, char *argv[]); +extern int lxc_start(const char *name, char *const argv[]); /* * Stop the container previously started with lxc_start, all diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c index 0faf446c7..3f8741f56 100644 --- a/src/lxc/lxc_start.c +++ b/src/lxc/lxc_start.c @@ -36,63 +36,50 @@ #include #include +#include "arguments.h" lxc_log_define(lxc_start, lxc); -void usage(char *cmd) -{ - fprintf(stderr, "%s \n", basename(cmd)); - fprintf(stderr, "\t -n : name of the container\n"); - fprintf(stderr, "\t[-o ] : path of the log file\n"); - fprintf(stderr, "\t[-l ]: log level priority\n"); - fprintf(stderr, "\t[-q ] : be quiet\n"); - _exit(1); -} +static const struct option my_longopts[] = { + LXC_COMMON_OPTIONS +}; + +static struct lxc_arguments my_args = { + .progname = "lxc-start", + .help = "\ +--name=NAME -- COMMAND\n\ +\n\ +lxc-start start COMMAND in specified container NAME\n\ +\n\ +Options :\n\ + -n, --name=NAME NAME for name of the container", + .options = my_longopts, + .parser = NULL, + .checker = NULL, +}; int main(int argc, char *argv[]) { - char *name = NULL; - const char *log_file = NULL, *log_priority = NULL; - char **args; - int opt, err = LXC_ERROR_INTERNAL, nbargs = 0; - int quiet = 0; + char *const *args; + int err; struct termios tios; - char *default_args[] = { + char *const default_args[] = { "/sbin/init", '\0', }; - while ((opt = getopt(argc, argv, "n:o:l:")) != -1) { - switch (opt) { - case 'n': - name = optarg; - break; - case 'o': - log_file = optarg; - break; - case 'l': - log_priority = optarg; - break; - case 'q': - quiet = 1; - break; - } - - nbargs++; - } + err = lxc_arguments_parse(&my_args, argc, argv); + if (err) + return 1; - if (!argv[optind] || !strlen(argv[optind])) + if (!my_args.argc) args = default_args; - else { - args = &argv[optind]; - argc -= nbargs; - } - - if (!name) - usage(argv[0]); + else + args = my_args.argv; - if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet)) + if (lxc_log_init(my_args.log_file, my_args.log_priority, + my_args.progname, my_args.quiet)) return 1; if (tcgetattr(0, &tios)) { @@ -101,9 +88,9 @@ int main(int argc, char *argv[]) return 1; } - err = lxc_start(name, args); + err = lxc_start(my_args.name, args); if (err) { - ERROR("failed to start '%s'", name); + ERROR("failed to start '%s'", my_args.name); err = 1; } diff --git a/src/lxc/start.c b/src/lxc/start.c index 3d10153a8..83aff9aba 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -410,7 +410,7 @@ void lxc_abort(const char *name, struct lxc_handler *handler) kill(handler->pid, SIGKILL); } -int lxc_spawn(const char *name, struct lxc_handler *handler, char *argv[]) +int lxc_spawn(const char *name, struct lxc_handler *handler, char *const argv[]) { int sv[2]; int clone_flags; @@ -539,7 +539,7 @@ out_abort: goto out_close; } -int lxc_start(const char *name, char *argv[]) +int lxc_start(const char *name, char *const argv[]) { struct lxc_handler handler = { 0 }; int err = -LXC_ERROR_INTERNAL; diff --git a/src/lxc/start.h b/src/lxc/start.h index 9eccc331c..6324d3764 100644 --- a/src/lxc/start.h +++ b/src/lxc/start.h @@ -32,7 +32,7 @@ struct lxc_handler { extern int lxc_init(const char *name, struct lxc_handler *handler); extern int lxc_spawn(const char *name, struct lxc_handler *handler, - char *argv[]); + char *const argv[]); extern int lxc_poll(const char *name, struct lxc_handler *handler); extern void lxc_abort(const char *name, struct lxc_handler *handler);