diff mbox

[07/31] petitboot: Fix kexec call

Message ID 20090708001135.423474087@am.sony.com
State New
Headers show

Commit Message

Geoff Levand July 8, 2009, 12:11 a.m. UTC
Fix the preparation of kexec call args.  kexec wants the param
and value in the same arg.

Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
---
 ui/common/ui-system.c |   23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)
diff mbox

Patch

--- a/ui/common/ui-system.c
+++ b/ui/common/ui-system.c
@@ -43,20 +43,24 @@  static int run_kexec_local(const char *l
 	const char *args)
 {
 	int result;
-	const char *argv[8];
+	const char *argv[6];
 	const char **p;
+	char *s_initrd = NULL;
+	char *s_args = NULL;
 
 	p = argv;
 	*p++ = pb_system_apps.kexec;		/* 1 */
 
 	if (l_initrd) {
-		*p++ = "--initrd";		/* 2 */
-		*p++ = l_initrd;		/* 3 */
+		s_initrd = talloc_asprintf(NULL, "--initrd=%s", l_initrd);
+		assert(s_initrd);
+		*p++ = s_initrd;		 /* 2 */
 	}
 
 	if (args) {
-		*p++ = "--append";		/* 4 */
-		*p++ = args;			/* 5 */
+		s_args = talloc_asprintf(NULL, "--append=%s", args);
+		assert(s_args);
+		*p++ = s_args;			 /* 3 */
 	}
 
 	/* First try by telling kexec to run shutdown */
@@ -70,9 +74,9 @@  static int run_kexec_local(const char *l
 	/* On error, force a kexec with the -f option */
 
 	if (result) {
-		*(p + 0) = "-f";		/* 6 */
-		*(p + 1) = l_image;		/* 7 */
-		*(p + 2) = NULL;		/* 8 */
+		*(p + 0) = "-f";		/* 4 */
+		*(p + 1) = l_image;		/* 5 */
+		*(p + 2) = NULL;		/* 6 */
 
 		result = pb_run_cmd(argv);
 	}
@@ -80,6 +84,9 @@  static int run_kexec_local(const char *l
 	if (result)
 		pb_log("%s: failed: (%d)\n", __func__, result);
 
+	talloc_free(s_initrd);
+	talloc_free(s_args);
+
 	return result;
 }