From 01f8ce581b5ad22dded75333d8c738daaf0b4343 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 27 Jun 2012 20:43:05 +0200 Subject: menu: factor out a function to print an entry To save a few bytes of binary space. Signed-off-by: Sascha Hauer --- common/menu.c | 70 +++++++++++++---------------------------------------------- 1 file changed, 15 insertions(+), 55 deletions(-) (limited to 'common') diff --git a/common/menu.c b/common/menu.c index 6c530b6f86..649926fa8a 100644 --- a/common/menu.c +++ b/common/menu.c @@ -53,7 +53,6 @@ void menu_free(struct menu *m) free(m->name); free(m->display); free(m->auto_display); - free(m->display_buffer); list_for_each_entry_safe(me, tmp, &m->entries, list) menu_entry_free(me); @@ -87,15 +86,9 @@ EXPORT_SYMBOL(menu_remove); int menu_add_entry(struct menu *m, struct menu_entry *me) { - int len; - if (!m || !me || !me->display) return -EINVAL; - len = strlen(me->display); - - m->width = max(len, m->width); - m->nb_entries++; me->num = m->nb_entries; list_add_tail(&me->list, &m->entries); @@ -160,6 +153,18 @@ void menu_entry_free(struct menu_entry *me) } EXPORT_SYMBOL(menu_entry_free); +static void __print_entry(const char *str) +{ + static char outstr[256]; + + if (IS_ENABLED(CONFIG_SHELL_HUSH)) { + process_escape_sequence(str, outstr, 256); + puts(outstr); + } else { + puts(str); + } +} + static void print_menu_entry(struct menu *m, struct menu_entry *me, int selected) { @@ -174,17 +179,11 @@ static void print_menu_entry(struct menu *m, struct menu_entry *me, puts(" "); } - if (IS_ENABLED(CONFIG_SHELL_HUSH)) - process_escape_sequence(me->display, m->display_buffer, - m->display_buffer_size); - printf(" %d: ", me->num); if (selected) puts("\e[7m"); - if (IS_ENABLED(CONFIG_SHELL_HUSH)) - puts(m->display_buffer); - else - puts(me->display); + + __print_entry(me->display); if (selected) puts("\e[m"); @@ -241,13 +240,7 @@ static void print_menu(struct menu *m) clear(); gotoXY(1, 2); if(m->display) { - if (IS_ENABLED(CONFIG_SHELL_HUSH)) { - process_escape_sequence(m->display, m->display_buffer, - m->display_buffer_size); - puts(m->display_buffer); - } else { - puts(m->display); - } + __print_entry(m->display); } else { puts("Menu : "); puts(m->name); @@ -266,34 +259,6 @@ static void print_menu(struct menu *m) print_menu_entry(m, m->selected, 1); } -static int menu_alloc_display_buffer(struct menu *m) -{ - int min_size; - - if (m->display) - min_size = max((int)strlen(m->display), m->width); - else - min_size = m->width; - - - if (m->display_buffer) { - if (m->display_buffer_size >= min_size) - return 0; - m->display_buffer = realloc(m->display_buffer, min_size * sizeof(char)); - } else { - m->display_buffer = calloc(min_size, sizeof(char)); - } - - if (!m->display_buffer) { - perror("display_buffer"); - return -ENOMEM; - } - - m->display_buffer_size = min_size; - - return 0; -} - int menu_show(struct menu *m) { int ch, ch_previous = 0; @@ -301,15 +266,10 @@ int menu_show(struct menu *m) int countdown; int auto_display_len = 16; uint64_t start, second; - int ret; if(!m || list_empty(&m->entries)) return -EINVAL; - ret = menu_alloc_display_buffer(m); - if (ret) - return ret; - print_menu(m); countdown = m->auto_select; -- cgit v1.2.3