diff options
author | Rob Herring <rob.herring@calxeda.com> | 2012-03-28 05:51:37 +0000 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2012-06-21 22:35:34 +0200 |
commit | 34bd23e42f3ba9b7fb333a29ea36e9a73b608b8e (patch) | |
tree | 27b2a4a7a9909d861dee274bacf95d05ea5b0100 /common/cmd_pxe.c | |
parent | 90ba7d7c444856ca8619ab63e6ed4ab1560f564d (diff) |
pxe: parse initrd file from append string
For syslinux, the initrd can be set in the append string as
"initrd=<file>", so try to find it there if we haven't already set the
initrd.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Diffstat (limited to 'common/cmd_pxe.c')
-rw-r--r-- | common/cmd_pxe.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c index 8d2c1e8665e..0fc863b22a3 100644 --- a/common/cmd_pxe.c +++ b/common/cmd_pxe.c @@ -999,6 +999,7 @@ static int parse_label_menu(char **c, struct pxe_menu *cfg, static int parse_label(char **c, struct pxe_menu *cfg) { struct token t; + int len; char *s = *c; struct pxe_label *label; int err; @@ -1033,10 +1034,22 @@ static int parse_label(char **c, struct pxe_menu *cfg) case T_APPEND: err = parse_sliteral(c, &label->append); + if (label->initrd) + break; + s = strstr(label->append, "initrd="); + if (!s) + break; + s += 7; + len = (int)(strchr(s, ' ') - s); + label->initrd = malloc(len + 1); + strncpy(label->initrd, s, len); + label->initrd[len] = '\0'; + break; case T_INITRD: - err = parse_sliteral(c, &label->initrd); + if (!label->initrd) + err = parse_sliteral(c, &label->initrd); break; case T_LOCALBOOT: |