X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fmenu.c;h=6b2a2db3e0acae40f1332a349057de8ab96b161c;hb=61e129885a8fd6d36c25301e537d46e66b6c6e6a;hp=ca1baefbbd5fcf8bc2426829065242c0d1544b52;hpb=d887ad54ca74063338bc3108beed0aa4f15d1f6b;p=u-boot diff --git a/common/menu.c b/common/menu.c index ca1baefbbd..6b2a2db3e0 100644 --- a/common/menu.c +++ b/common/menu.c @@ -88,7 +88,7 @@ static inline void *menu_item_print(struct menu *m, void *extra) { if (!m->item_data_print) { - putc(item->key); + puts(item->key); putc('\n'); } else { m->item_data_print(item->data); @@ -113,6 +113,13 @@ static inline void *menu_item_destroy(struct menu *m, return NULL; } +void __menu_display_statusline(struct menu *m) +{ + return; +} +void menu_display_statusline(struct menu *m) + __attribute__ ((weak, alias("__menu_display_statusline"))); + /* * Display a menu so the user can make a choice of an item. First display its * title, if any, and then each item in the menu. @@ -123,6 +130,7 @@ static inline void menu_display(struct menu *m) puts(m->title); putc('\n'); } + menu_display_statusline(m); menu_items_iter(m, menu_item_print, NULL); } @@ -162,32 +170,6 @@ static inline struct menu_item *menu_item_by_key(struct menu *m, return menu_items_iter(m, menu_item_key_match, item_key); } -/* - * Wait for the user to hit a key according to the timeout set for the menu. - * Returns 1 if the user hit a key, or 0 if the timeout expired. - */ -static inline int menu_interrupted(struct menu *m) -{ - if (!m->timeout) - return 0; - - if (abortboot(m->timeout/10)) - return 1; - - return 0; -} - -/* - * Checks whether or not the default menu item should be used without - * prompting for a user choice. If the menu is set to always prompt, or the - * user hits a key during the timeout period, return 0. Otherwise, return 1 to - * indicate we should use the default menu item. - */ -static inline int menu_use_default(struct menu *m) -{ - return !m->prompt && !menu_interrupted(m); -} - /* * Set *choice to point to the default item's data, if any default item was * set, and returns 1. If no default item was set, returns -ENOENT. @@ -222,17 +204,18 @@ static inline int menu_interactive_choice(struct menu *m, void **choice) menu_display(m); - readret = readline_into_buffer("Enter choice: ", cbuf); + readret = readline_into_buffer("Enter choice: ", cbuf, + m->timeout / 10); if (readret >= 0) { choice_item = menu_item_by_key(m, cbuf); - if (!choice_item) + if (!choice_item) { printf("%s not found\n", cbuf); - } else { - puts("^C\n"); - return -EINTR; - } + m->timeout = 0; + } + } else + return menu_default_choice(m, choice); } *choice = choice_item->data; @@ -289,7 +272,7 @@ int menu_get_choice(struct menu *m, void **choice) if (!m || !choice) return -EINVAL; - if (menu_use_default(m)) + if (!m->prompt) return menu_default_choice(m, choice); return menu_interactive_choice(m, choice);