[ipxe-devel] [PATCH] fix up command-line support

Dave Hansen dave at sr71.net
Tue Jun 28 02:05:34 BST 2011


I recently upgraded my version of iPXE and I noticed that the
command-line support was no longer working for me.

My command-line looks like:

	BOOT_IMAGE=/boot/ipxe.lkrn && set foo bar && ...

Other folks have it show up like this:

	&& set foo bar && ... BOOT_IMAGE=/boot/ipxe.lkrn

The existing code simply nulls out the first byte of the
BOOT_IMAGE= string:

	if ( ( tmp = strstr ( cmdline, "BOOT_IMAGE=" ) ) != NULL )
		*tmp = '\0';

But, for the case where the command-line _starts_ with
BOOT_IMAGE, this ends up effectively erasing it since
strstr() returns the beginning of the matched string.

This patch should handle both cases.  When "BOOT_IMAGE="
is at the beginning, it moves the cmdline up past the
first space.  When it shows up at the end, it retains the
existing behavior and puts in a NULL character in at the
beginning of "BOOT_IMAGE=".
---
 src/arch/i386/core/cmdline.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/arch/i386/core/cmdline.c b/src/arch/i386/core/cmdline.c
index fa5adb8..be04838 100644
--- a/src/arch/i386/core/cmdline.c
+++ b/src/arch/i386/core/cmdline.c
@@ -92,8 +92,19 @@ static void cmdline_init ( void ) {
 	while ( isspace ( *cmdline ) )
 		cmdline++;
 	if ( ( tmp = strstr ( cmdline, "BOOT_IMAGE=" ) ) != NULL ) {
-		DBGC ( image, "CMDLINE stripping \"%s\"\n", tmp );
-		*tmp = '\0';
+		/* The string seems to happen either at the beginning or
+		 * the end of the command-line.  Handle both. */
+		if ( tmp == cmdline ) {
+			tmp = strstr ( cmdline, " " );
+			if ( tmp != NULL ) {
+				*tmp = '\0';
+			}
+			DBGC ( image, "CMDLINE stripping \"%s \"\n", cmdline );
+			cmdline = tmp + 1;
+		} else {
+			DBGC ( image, "CMDLINE stripping \"%s\"\n", tmp );
+			*tmp = '\0';
+		}
 	}
 	DBGC ( image, "CMDLINE using \"%s\"\n", cmdline );
 
-- 
1.6.6.rc0.50.gaf06e9



More information about the ipxe-devel mailing list