pxe: add support for ontimeout token

ontimeout is similar to default, but is the selection on menu timeout.
This is how cobbler sets a default. The label default is supposed to be
the default selection when <enter> is pressed. If both default and
ontimeout are set, last one parsed wins.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
This commit is contained in:
Rob Herring 2012-12-02 21:00:27 -06:00 committed by Joe Hershberger
parent 32d2ffe731
commit 8577fec976

View File

@ -672,6 +672,7 @@ enum token_type {
T_PROMPT, T_PROMPT,
T_INCLUDE, T_INCLUDE,
T_FDT, T_FDT,
T_ONTIMEOUT,
T_INVALID T_INVALID
}; };
@ -700,6 +701,7 @@ static const struct token keywords[] = {
{"initrd", T_INITRD}, {"initrd", T_INITRD},
{"include", T_INCLUDE}, {"include", T_INCLUDE},
{"fdt", T_FDT}, {"fdt", T_FDT},
{"ontimeout", T_ONTIMEOUT,},
{NULL, T_INVALID} {NULL, T_INVALID}
}; };
@ -997,10 +999,8 @@ static int parse_label_menu(char **c, struct pxe_menu *cfg,
switch (t.type) { switch (t.type) {
case T_DEFAULT: case T_DEFAULT:
if (cfg->default_label) if (!cfg->default_label)
free(cfg->default_label); cfg->default_label = strdup(label->name);
cfg->default_label = strdup(label->name);
if (!cfg->default_label) if (!cfg->default_label)
return -ENOMEM; return -ENOMEM;
@ -1159,6 +1159,7 @@ static int parse_pxefile_top(char *p, struct pxe_menu *cfg, int nest_level)
break; break;
case T_DEFAULT: case T_DEFAULT:
case T_ONTIMEOUT:
err = parse_sliteral(&p, &label_name); err = parse_sliteral(&p, &label_name);
if (label_name) { if (label_name) {
@ -1280,7 +1281,7 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
return NULL; return NULL;
} }
if (cfg->default_label && if (cfg->default_label &&
(strcmp(label->name, cfg->default_label) == 0)) (strcmp(label->name, cfg->default_label) == 0))
default_num = label->num; default_num = label->num;
} }