aboutsummaryrefslogtreecommitdiff
path: root/common/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/menu.c')
-rw-r--r--common/menu.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/common/menu.c b/common/menu.c
index 9bcd90609..507b122a5 100644
--- a/common/menu.c
+++ b/common/menu.c
@@ -30,6 +30,7 @@ struct menu_item {
struct menu {
struct menu_item *default_item;
+ int timeout;
char *title;
int prompt;
void (*item_data_print)(void *);
@@ -113,9 +114,20 @@ static inline struct menu_item *menu_item_by_key(struct menu *m,
return menu_items_iter(m, menu_item_key_match, item_key);
}
+static inline int menu_interrupted(struct menu *m)
+{
+ if (!m->timeout)
+ return 0;
+
+ if (abortboot(m->timeout/10))
+ return 1;
+
+ return 0;
+}
+
static inline int menu_use_default(struct menu *m)
{
- return !m->prompt;
+ return !m->prompt && !menu_interrupted(m);
}
static inline int menu_default_choice(struct menu *m, void **choice)
@@ -221,7 +233,7 @@ int menu_item_add(struct menu *m, char *item_key, void *item_data)
return 1;
}
-struct menu *menu_create(char *title, int prompt,
+struct menu *menu_create(char *title, int timeout, int prompt,
void (*item_data_print)(void *))
{
struct menu *m;
@@ -233,6 +245,7 @@ struct menu *menu_create(char *title, int prompt,
m->default_item = NULL;
m->prompt = prompt;
+ m->timeout = timeout;
m->item_data_print = item_data_print;
if (title) {