The command specifies a configuration file => use it
The command does not specify a configuration but the container
was created before, use the configuration.
The command does not specify a configuration and the container
was not created before, use default.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
 src/lxc/lxc_execute.c |   17 +++++++++++++++++
 src/lxc/lxc_start.c   |   24 +++++++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

Index: lxc/src/lxc/lxc_start.c
===================================================================
--- lxc.orig/src/lxc/lxc_start.c
+++ lxc/src/lxc/lxc_start.c
@@ -20,8 +20,11 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
+#define _GNU_SOURCE
 #include <stdio.h>
+#undef _GNU_SOURCE
 #include <libgen.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 #include <termios.h>
@@ -40,6 +43,7 @@
 #include <lxc/lxc.h>
 #include <lxc/log.h>
 #include "arguments.h"
+#include "config.h"
 
 lxc_log_define(lxc_start, lxc);
 
@@ -125,6 +129,8 @@ int main(int argc, char *argv[])
 		'\0',
 	};
 
+	char *rcfile = NULL;
+
 	if (lxc_arguments_parse(&my_args, argc, argv))
 		return err;
 
@@ -137,6 +143,22 @@ int main(int argc, char *argv[])
 			 my_args.progname, my_args.quiet))
 		return err;
 
+	/* rcfile is specified in the cli option */
+	if (my_args.rcfile)
+		rcfile = (char *)my_args.rcfile;
+	else {
+		if (!asprintf(&rcfile, LXCPATH "/%s", my_args.name)) {
+			SYSERROR("failed to allocate memory");
+			return err;
+		}
+
+		/* container configuration does not exist */
+		if (access(rcfile, F_OK)) {
+			free(rcfile);
+			rcfile = NULL;
+		}
+	}
+
 	if (my_args.daemonize) {
 
                 /* do not chdir as we want to open the log file,
@@ -165,7 +187,7 @@ int main(int argc, char *argv[])
 
 	save_tty(&tios);
 
-	err = lxc_start(my_args.name, args, my_args.rcfile);
+	err = lxc_start(my_args.name, args, rcfile);
 
 	restore_tty(&tios);
 
Index: lxc/src/lxc/lxc_execute.c
===================================================================
--- lxc.orig/src/lxc/lxc_execute.c
+++ lxc/src/lxc/lxc_execute.c
@@ -80,6 +80,7 @@ Options :\n\
 int main(int argc, char *argv[])
 {
 	static char **args;
+	char *rcfile;
 
 	if (lxc_arguments_parse(&my_args, argc, argv))
 		return -1;
@@ -92,6 +93,22 @@ int main(int argc, char *argv[])
 	if (!args)
 		return -1;
 
+	/* rcfile is specified in the cli option */
+	if (my_args.rcfile)
+		rcfile = (char *)my_args.rcfile;
+	else {
+		if (!asprintf(&rcfile, LXCPATH "/%s", my_args.name)) {
+			SYSERROR("failed to allocate memory");
+			return err;
+		}
+
+		/* container configuration does not exist */
+		if (access(rcfile, F_OK)) {
+			free(rcfile);
+			rcfile = NULL;
+		}
+	}
+
 	return lxc_start(my_args.name, args, my_args.rcfile);
 }
 



