[OpenBIOS] [commit] r1088 - trunk/openbios-devel/packages
repository service
svn at openbios.org
Sun Jan 13 16:26:57 CET 2013
Author: mcayland
Date: Sun Jan 13 16:26:57 2013
New Revision: 1088
URL: http://tracker.coreboot.org/trac/openbios/changeset/1088
Log:
Switch partition argument parsing to use left-parse-string as per CHRP bindings.
As suggested in the PPC CHRP bindings, use the Forth left-parse-string word
to parse the arguments passed to open in the mac-parts, sun-parts and pc-parts
packages. This results is a much less complicated and more robust argument
parser.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.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 Sun Jan 13 16:26:53 2013 (r1087)
+++ trunk/openbios-devel/packages/mac-parts.c Sun Jan 13 16:26:57 2013 (r1088)
@@ -49,8 +49,7 @@
macparts_open( macparts_info_t *di )
{
char *str = my_args_copy();
- char *argstr = strdup("");
- char *parstr = strdup("");
+ char *parstr = NULL, *argstr = NULL;
int bs, parnum=-1, apple_parnum=-1;
int parlist[2], parlist_size = 0;
desc_map_t dmap;
@@ -67,47 +66,32 @@
id: [0-7]
[(id)][,][filespec]
*/
-
- if( str ) {
- if ( !strlen(str) )
- parnum = -1;
- else {
- /* 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 */
- if (strlen(parstr))
- parnum = atol(parstr);
-
- /* Detect if we are looking for the bootcode */
- if (strcmp(argstr, "%BOOT") == 0)
- want_bootcode = 1;
+
+ if ( strlen(str) ) {
+ /* Detect the arguments */
+ if ((*str >= '0' && *str <= '9') || (*str == ',')) {
+ push_str(str);
+ PUSH(',');
+ fword("left-parse-string");
+ parstr = pop_fstr_copy();
+ argstr = pop_fstr_copy();
+ } else {
+ argstr = str;
}
+
+ /* Convert the id to a partition number */
+ if (parstr && strlen(parstr))
+ parnum = atol(parstr);
+
+ /* Detect if we are looking for the bootcode */
+ if (strcmp(argstr, "%BOOT") == 0)
+ want_bootcode = 1;
}
+ /* Make sure argstr is not null */
+ if (argstr == NULL)
+ argstr = strdup("");
+
DPRINTF("parstr: %s argstr: %s parnum: %d\n", parstr, argstr, parnum);
DPRINTF("want_bootcode %d\n", want_bootcode);
@@ -230,7 +214,7 @@
/* Make sure our partition is valid */
parnum = parlist[j];
- DPRINTF("Selected partition %d to boot\n", parnum);
+ DPRINTF("Selected partition %d\n", parnum);
SEEK( bs * parnum );
READ( &par, sizeof(par) );
Modified: trunk/openbios-devel/packages/pc-parts.c
==============================================================================
--- trunk/openbios-devel/packages/pc-parts.c Sun Jan 13 16:26:53 2013 (r1087)
+++ trunk/openbios-devel/packages/pc-parts.c Sun Jan 13 16:26:57 2013 (r1088)
@@ -94,42 +94,27 @@
[(id)][,][filespec]
*/
- if( str ) {
- if ( !strlen(str) )
- parnum = -1;
- else {
- /* 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 */
- if (strlen(parstr))
- parnum = atol(parstr);
+ if ( strlen(str) ) {
+ /* Detect the arguments */
+ if ((*str >= '0' && *str <= '7') || (*str == ',')) {
+ push_str(str);
+ PUSH(',');
+ fword("left-parse-string");
+ parstr = pop_fstr_copy();
+ argstr = pop_fstr_copy();
+ } else {
+ argstr = str;
}
+
+ /* Convert the id to a partition number */
+ if (parstr && strlen(parstr))
+ parnum = atol(parstr);
}
+ /* Make sure argstr is not null */
+ if (argstr == NULL)
+ argstr = strdup("");
+
DPRINTF("parstr: %s argstr: %s parnum: %d\n", parstr, argstr, parnum);
free(parstr);
Modified: trunk/openbios-devel/packages/sun-parts.c
==============================================================================
--- trunk/openbios-devel/packages/sun-parts.c Sun Jan 13 16:26:53 2013 (r1087)
+++ trunk/openbios-devel/packages/sun-parts.c Sun Jan 13 16:26:57 2013 (r1088)
@@ -109,46 +109,31 @@
[(id)][,][filespec]
*/
- if( str ) {
- if ( !strlen(str) )
- parnum = -1;
- else {
- /* 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;
- }
+ if ( strlen(str) ) {
+ /* Detect the arguments */
+ if ((*str >= '0' && *str <= '9') || (*str >= 'a' && *str < ('a' + 8)) || (*str == ',')) {
+ push_str(str);
+ PUSH(',');
+ fword("left-parse-string");
+ parstr = pop_fstr_copy();
+ argstr = pop_fstr_copy();
+ } else {
+ argstr = str;
+ }
- /* Convert the id to a partition number */
- if (parstr && strlen(parstr)) {
- if (parstr[0] >= 'a' && parstr[0] < ('a' + 8))
- parnum = parstr[0] - 'a';
- else
- parnum = atol(parstr);
- }
+ /* Convert the id to a partition number */
+ if (parstr && strlen(parstr)) {
+ if (parstr[0] >= 'a' && parstr[0] < ('a' + 8))
+ parnum = parstr[0] - 'a';
+ else
+ parnum = atol(parstr);
}
}
+ /* Make sure argstr is not null */
+ if (argstr == NULL)
+ argstr = strdup("");
+
DPRINTF("parstr: %s argstr: %s parnum: %d\n", parstr, argstr, parnum);
di->filesystem_ph = 0;
More information about the OpenBIOS
mailing list