[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