[OpenBIOS] [commit] r823 - trunk/openbios-devel/libopenbios
repository service
svn at openbios.org
Sun Aug 1 00:46:00 CEST 2010
Author: mcayland
Date: Sun Aug 1 00:46:00 2010
New Revision: 823
URL: http://tracker.coreboot.org/trac/openbios/changeset/823
Log:
Fix the bootinfo loader so that it will correctly accept device strings with no partition id, e.g. load cdrom:,\path\to\file.
Also add a little bootscript debugging for those people that may need it.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Modified:
trunk/openbios-devel/libopenbios/bootinfo_load.c
Modified: trunk/openbios-devel/libopenbios/bootinfo_load.c
==============================================================================
--- trunk/openbios-devel/libopenbios/bootinfo_load.c Sun Jul 25 19:34:13 2010 (r822)
+++ trunk/openbios-devel/libopenbios/bootinfo_load.c Sun Aug 1 00:46:00 2010 (r823)
@@ -43,20 +43,28 @@
return buf;
}
-static int
+static char *
get_partition( const char *path )
{
+ static char buf[2];
+
+ buf[0] = '\0';
+ buf[1] = '\0';
+
while ( *path && *path != ':' )
path++;
if (!*path)
- return -1;
+ return buf;
path++;
- if (!strchr(path, ',')) /* check if there is a ',' */
- return -1;
+ if (path[0] == ',' || !strchr(path, ',')) /* if there is not a ',' or no partition id then return */
+ return buf;
- return atol(path);
+ /* Must be a partition id */
+ buf[0] = path[0];
+
+ return buf;
}
static char *
@@ -128,8 +136,7 @@
phandle_t chosen;
int tag, taglen, script, scriptlen, scriptvalid, entity, chrp;
char tagbuf[128], c;
- char *device, *filename, *directory;
- int partition;
+ char *device, *filename, *directory, *partition;
int current, size;
char *bootscript;
char *tmp;
@@ -220,11 +227,8 @@
strcpy(bootscript + scriptlen, device);
scriptlen += strlen(device);
} else if (strncasecmp(tagbuf, "partition", 9) == 0) {
- if (partition != -1)
- sprintf(bootscript + scriptlen, "%d", partition);
- else
- *(bootscript + scriptlen) = 0;
- scriptlen = strlen(bootscript);
+ strcpy(bootscript + scriptlen, partition);
+ scriptlen += strlen(partition);
} else if (strncasecmp(tagbuf, "directory", 9) == 0) {
strcpy(bootscript + scriptlen, directory);
scriptlen += strlen(directory);
@@ -249,8 +253,10 @@
}
/* If the payload is bootinfo then we execute it immediately */
- if (scriptvalid)
+ if (scriptvalid) {
+ DPRINTF("bootscript: %s\n", bootscript);
feval(bootscript);
+ }
else
DPRINTF("Unable to parse bootinfo bootscript\n");
}
More information about the OpenBIOS
mailing list