]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[prefix] Cope with BOOT_IMAGE= anywhere within command line
authorMichael Brown <mcb30@ipxe.org>
Tue, 28 Jun 2011 10:29:28 +0000 (11:29 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 28 Jun 2011 10:33:39 +0000 (11:33 +0100)
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 <dave@sr71.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/core/cmdline.c

index fa5adb8c6b75ae4d2192fbb118dc1f4f5b7a5321..595fdada5f028d5a6a2b6e375f0b3de4a4930896 100644 (file)
@@ -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 );