[OpenBIOS] [commit] r795 - trunk/openbios-devel/packages

repository service svn at openbios.org
Tue Jun 15 21:59:47 CEST 2010


Author: mcayland
Date: Tue Jun 15 21:59:47 2010
New Revision: 795
URL: http://tracker.coreboot.org/trac/openbios/changeset/795

Log:
Fix partition string parsing code so that it correctly handles boot strings beginning with a comma of the form 
<device>,\path\to\file. This fixes all outstanding issues with PPC.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>

Modified:
   trunk/openbios-devel/packages/mac-parts.c
   trunk/openbios-devel/packages/pc-parts.c
   trunk/openbios-devel/packages/sun-parts.c

Modified: trunk/openbios-devel/packages/mac-parts.c
==============================================================================
--- trunk/openbios-devel/packages/mac-parts.c	Tue Jun 15 18:31:54 2010	(r794)
+++ trunk/openbios-devel/packages/mac-parts.c	Tue Jun 15 21:59:47 2010	(r795)
@@ -62,26 +62,37 @@
 	/* 
 		Arguments that we accept:
 		id: [0-7]
-		[(id,)][filespec]
+		[(id)][,][filespec]
 	*/
 
 	if( str ) {
 		if ( !strlen(str) )
 			parnum = -1;
 		else {
-			/* If end of string, we just have a partition id */
-			if (str[1] == '\0') {
-				parstr = str;
-			} else {
-				/* If a comma, then we have a partition id plus argument */
-				if (str[1] == ',') {
-					str[1] = '\0';
-					parstr = str;
-					argstr = &str[2];
-				} else {
-					/* Otherwise we have just an argument */
-					argstr = str;
-				}
+			/* Detect the boot parameters */
+			char *ptr;
+			ptr = str;
+
+			/* <id>,<file> */
+			if (*ptr >= '0' && *ptr <= '9' && *(ptr + 1) == ',') {
+				parstr = ptr;
+				*(ptr + 1) = '\0';
+				argstr = ptr + 2;
+			}
+
+			/* <id> */
+			else if (*ptr >= '0' && *ptr <='9' && *(ptr + 1) == '\0') {
+				parstr = ptr;
+			}
+
+			/* ,<file> */
+			else if (*ptr == ',') {
+				argstr = ptr + 1;
+			}	
+
+			/* <file> */
+			else {
+				argstr = str;
 			}
 		
 			/* Convert the id to a partition number */

Modified: trunk/openbios-devel/packages/pc-parts.c
==============================================================================
--- trunk/openbios-devel/packages/pc-parts.c	Tue Jun 15 18:31:54 2010	(r794)
+++ trunk/openbios-devel/packages/pc-parts.c	Tue Jun 15 21:59:47 2010	(r795)
@@ -89,26 +89,37 @@
 	/* 
 		Arguments that we accept:
 		id: [0-7]
-		[(id,)][filespec]
+		[(id)][,][filespec]
 	*/
 
 	if( str ) {
 		if ( !strlen(str) )
 			parnum = -1;
 		else {
-			/* If end of string, we just have a partition id */
-			if (str[1] == '\0') {
-				parstr = str;
-			} else {
-				/* If a comma, then we have a partition id plus argument */
-				if (str[1] == ',') {
-					str[1] = '\0';
-					parstr = str;
-					argstr = &str[2];
-				} else {
-					/* Otherwise we have just an argument */
-					argstr = str;
-				}
+			/* Detect the boot parameters */
+			char *ptr;
+			ptr = str;
+
+			/* <id>,<file> */
+			if (*ptr >= '0' && *ptr <= '9' && *(ptr + 1) == ',') {
+				parstr = ptr;
+				*(ptr + 1) = '\0';
+				argstr = ptr + 2;
+			}
+
+			/* <id> */
+			else if (*ptr >= '0' && *ptr <='9' && *(ptr + 1) == '\0') {
+				parstr = ptr;
+			}
+
+			/* ,<file> */
+			else if (*ptr == ',') {
+				argstr = ptr + 1;
+			}	
+
+			/* <file> */
+			else {
+				argstr = str;
 			}
 		
 			/* Convert the id to a partition number */

Modified: trunk/openbios-devel/packages/sun-parts.c
==============================================================================
--- trunk/openbios-devel/packages/sun-parts.c	Tue Jun 15 18:31:54 2010	(r794)
+++ trunk/openbios-devel/packages/sun-parts.c	Tue Jun 15 21:59:47 2010	(r795)
@@ -106,26 +106,37 @@
 	/* 
 		Arguments that we accept:
 		id: [0-7] | [a-h]
-		[(id,)][filespec]
+		[(id)][,][filespec]
 	*/
 
 	if( str ) {
 		if ( !strlen(str) )
 			parnum = -1;
 		else {
-			/* If end of string, we just have a partition id */
-			if (str[1] == '\0') {
-				parstr = str;
-			} else {
-				/* If a comma, then we have a partition id plus argument */
-				if (str[1] == ',') {
-					str[1] = '\0';
-					parstr = str;
-					argstr = &str[2];
-				} else {
-					/* Otherwise we have just an argument */
-					argstr = str;
-				}
+			/* Detect the boot parameters */
+			char *ptr;
+			ptr = str;
+
+			/* <id>,<file> */
+			if (((*ptr >= '0' && *ptr <= '9') || (*ptr >= 'a' && *ptr <= 'a' + 8)) && *(ptr + 1) == ',') {
+				parstr = ptr;
+				*(ptr + 1) = '\0';
+				argstr = ptr + 2;
+			}
+
+			/* <id> */
+			else if (((*ptr >= '0' && *ptr <= '9') || (*ptr >= 'a' && *ptr <= 'a' + 8)) && *(ptr + 1) == '\0') {
+				parstr = ptr;
+			}
+
+			/* ,<file> */
+			else if (*ptr == ',') {
+				argstr = ptr + 1;
+			}	
+
+			/* <file> */
+			else {
+				argstr = str;
 			}
 		
 			/* Convert the id to a partition number */
@@ -134,7 +145,7 @@
 					parnum = parstr[0] - 'a';
 				else
 					parnum = atol(parstr);
-			}	
+			}
 		}
 	}
 



More information about the OpenBIOS mailing list