pxe: add support for ontimeout token
authorRob Herring <rob.herring@calxeda.com>
Mon, 3 Dec 2012 03:00:27 +0000 (21:00 -0600)
committerJoe Hershberger <joe.hershberger@ni.com>
Tue, 25 Jun 2013 00:07:34 +0000 (19:07 -0500)
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>
common/cmd_pxe.c

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