From be600ed9967d93f5012d5277d7ce8ce89d135918 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 28 Jun 2011 11:29:28 +0100 Subject: [PATCH] [prefix] Cope with BOOT_IMAGE= anywhere within command line Some bootloaders seem to add "BOOT_IMAGE=..." at the end of the command line; some at the start. Cope with either variation. Reported-by: Dave Hansen Signed-off-by: Michael Brown --- src/arch/i386/core/cmdline.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/arch/i386/core/cmdline.c b/src/arch/i386/core/cmdline.c index fa5adb8c..595fdada 100644 --- a/src/arch/i386/core/cmdline.c +++ b/src/arch/i386/core/cmdline.c @@ -66,7 +66,8 @@ static void cmdline_init ( void ) { struct image *image = &cmdline_image; userptr_t cmdline_user; char *cmdline; - char *tmp; + char *boot_image; + char *boot_image_end; size_t len; /* Do nothing if no command line was specified */ @@ -91,9 +92,18 @@ static void cmdline_init ( void ) { /* Check for unwanted cruft in the command line */ while ( isspace ( *cmdline ) ) cmdline++; - if ( ( tmp = strstr ( cmdline, "BOOT_IMAGE=" ) ) != NULL ) { - DBGC ( image, "CMDLINE stripping \"%s\"\n", tmp ); - *tmp = '\0'; + if ( ( boot_image = strstr ( cmdline, "BOOT_IMAGE=" ) ) != NULL ) { + boot_image_end = strchr ( boot_image, ' ' ); + if ( boot_image_end ) { + *boot_image_end = '\0'; + DBGC ( image, "CMDLINE stripping \"%s\"\n", + boot_image ); + strcpy ( boot_image, ( boot_image_end + 1 ) ); + } else { + DBGC ( image, "CMDLINE stripping \"%s\"\n", + boot_image ); + *boot_image = '\0'; + } } DBGC ( image, "CMDLINE using \"%s\"\n", cmdline );