[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