j
: Next unread message k
: Previous unread message j a
: Jump to all threads
j l
: Jump to MailingList overview
Subject: ppc correctly replace &device; and &partition;
This patch correctly replaces the variables &device; and &partition; with firmware values thus allowing to boot from different partitions.
Signed-off-by: Stefan Assmann sassmann@suse.de
Index: arch/ppc/qemu/main.c =================================================================== --- arch/ppc/qemu/main.c (revision 439) +++ arch/ppc/qemu/main.c (working copy) @@ -154,9 +154,9 @@ static void try_bootinfo(const char *path) { - int fd; - char tagbuf[256], bootscript[256], c, *left, *right; - int len, tag, taglen, script, scriptlen; + int fd, len, tag, taglen, script, scriptlen; + char tagbuf[256], bootscript[256], c; + char *buf, *partition;
snprintf(bootscript, sizeof(bootscript), "%s,ppc\bootinfo.txt", path); ELF_DPRINTF("Trying %s\n", bootscript); @@ -195,22 +195,23 @@ bootscript[scriptlen++] = c; } } while (1); - ELF_DPRINTF("got bootscript %s\n", bootscript);
- // Replace &device;: with original path - push_str(bootscript); - PUSH('&'); - fword("left-split"); - fword("2swap"); - PUSH(':'); - fword("left-split"); - fword("2drop"); - right = pop_fstr_copy(); - left = pop_fstr_copy(); - while (right[0] != '\' && right[0] != '\0') - right++; - snprintf(bootscript, sizeof(bootscript), "%s%s,%s", left, path, right); + /* replace &device; and &partition; */ + if ( (partition = strchr(path, ':')) != NULL ) { + *partition = '\0'; + partition++; + if ( (buf = strstr(bootscript, (const char *) "&device;")) != NULL ) { + *buf = '\0'; + buf += strlen("&device;"); + snprintf(bootscript, sizeof(bootscript), "%s%s%s", bootscript, path, buf); + } + if ( (buf = strstr(bootscript, (const char *) "&partition;")) != NULL ) { + *buf = '\0'; + buf += strlen("&partition;"); + snprintf(bootscript, sizeof(bootscript), "%s%s%s", bootscript, partition, buf); + } + } ELF_DPRINTF("fixed bootscript %s\n", bootscript);
feval(bootscript);
Stefan