[lxc-devel] [PATCH 2/3] Allow commands which do not require --name option
Michael Holzt
lxc at my.fqdn.org
Sat Jan 9 02:35:58 UTC 2010
This patch moves the mandatory check if a container name is specified
into a subroutine, which is only called if no custom checker is set.
This allows a command to not check for a container name, to enable e.g.
lxc_start to read it from a rcfile instead. To maintain current checking,
added a invocation of the check function to all custom checkers.
Signed-off-by: Michael Holzt <lxc at my.fqdn.org>
---
src/lxc/arguments.c | 17 ++++++++++++-----
src/lxc/arguments.h | 2 ++
src/lxc/lxc_cgroup.c | 3 +++
src/lxc/lxc_checkpoint.c | 3 +++
src/lxc/lxc_execute.c | 3 +++
src/lxc/lxc_restart.c | 3 +++
src/lxc/lxc_wait.c | 3 +++
7 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/src/lxc/arguments.c b/src/lxc/arguments.c
index b5ab5b4..4d50199 100644
--- a/src/lxc/arguments.c
+++ b/src/lxc/arguments.c
@@ -145,6 +145,16 @@ See the %s man page for further information.\n\n",
exit(code);
}
+extern int lxc_arguments_check_for_name(const struct lxc_arguments *args)
+{
+ if (!args->name) {
+ lxc_error(args, "missing container name, use --name option");
+ return -1;
+ }
+
+ return 0;
+}
+
extern int lxc_arguments_parse(struct lxc_arguments *args,
int argc, char * const argv[])
{
@@ -189,13 +199,10 @@ extern int lxc_arguments_parse(struct lxc_arguments *args,
/* Check the command options */
- if (!args->name) {
- lxc_error(args, "missing container name, use --name option");
- return -1;
- }
-
if (args->checker)
ret = args->checker(args);
+ else
+ ret = lxc_arguments_check_for_name(args);
error:
if (ret)
lxc_error(args, "could not parse command line");
diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h
index 71ca669..611bc38 100644
--- a/src/lxc/arguments.h
+++ b/src/lxc/arguments.h
@@ -72,6 +72,8 @@ struct lxc_arguments {
/* option keys for long only options */
#define OPT_USAGE 0x1000
+extern int lxc_arguments_check_for_name(const struct lxc_arguments *args);
+
extern int lxc_arguments_parse(struct lxc_arguments *args,
int argc, char *const argv[]);
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index f394d26..717205f 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -35,6 +35,9 @@ lxc_log_define(lxc_cgroup, lxc);
static int my_checker(const struct lxc_arguments* args)
{
+ if (lxc_arguments_check_for_name(args))
+ return -1;
+
if (!args->argc) {
lxc_error(args, "missing cgroup subsystem");
return -1;
diff --git a/src/lxc/lxc_checkpoint.c b/src/lxc/lxc_checkpoint.c
index 018068e..07b20d4 100644
--- a/src/lxc/lxc_checkpoint.c
+++ b/src/lxc/lxc_checkpoint.c
@@ -39,6 +39,9 @@ lxc_log_define(lxc_checkpoint, lxc);
static int my_checker(const struct lxc_arguments* args)
{
+ if (lxc_arguments_check_for_name(args))
+ return -1;
+
if (!args->statefile) {
lxc_error(args, "no statefile specified");
return -1;
diff --git a/src/lxc/lxc_execute.c b/src/lxc/lxc_execute.c
index 50fec10..d7f9374 100644
--- a/src/lxc/lxc_execute.c
+++ b/src/lxc/lxc_execute.c
@@ -43,6 +43,9 @@ lxc_log_define(lxc_execute, lxc);
static int my_checker(const struct lxc_arguments* args)
{
+ if (lxc_arguments_check_for_name(args))
+ return -1;
+
if (!args->argc) {
lxc_error(args, "missing command to execute !");
return -1;
diff --git a/src/lxc/lxc_restart.c b/src/lxc/lxc_restart.c
index 17cee0b..e0cd24a 100644
--- a/src/lxc/lxc_restart.c
+++ b/src/lxc/lxc_restart.c
@@ -36,6 +36,9 @@ lxc_log_define(lxc_restart, lxc);
static int my_checker(const struct lxc_arguments* args)
{
+ if (lxc_arguments_check_for_name(args))
+ return -1;
+
if (!args->statefile) {
lxc_error(args, "no statefile specified");
return -1;
diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c
index a5199e2..0d9c58f 100644
--- a/src/lxc/lxc_wait.c
+++ b/src/lxc/lxc_wait.c
@@ -35,6 +35,9 @@ lxc_log_define(lxc_wait, lxc);
static int my_checker(const struct lxc_arguments* args)
{
+ if (lxc_arguments_check_for_name(args))
+ return -1;
+
if (!args->states) {
lxc_error(args, "missing state option to wait for.");
return -1;
--
1.6.5
More information about the lxc-devel
mailing list