From c757c676428d70d854c3c7c637b8b7e7a8697043 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 23 Nov 2016 09:41:33 +0100 Subject: menu: sanitize menu_add_title passing a string to menu_add_title() which then gets free by this function is just plain ugly. Pass it a const char * which gets duplicated in menu_add_title() when necessary. Signed-off-by: Sascha Hauer --- common/boot.c | 2 +- common/menu.c | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'common') diff --git a/common/boot.c b/common/boot.c index 123b874b3c..4306319331 100644 --- a/common/boot.c +++ b/common/boot.c @@ -44,7 +44,7 @@ struct bootentries *bootentries_alloc(void) if (IS_ENABLED(CONFIG_MENU)) { bootentries->menu = menu_alloc(); - menu_add_title(bootentries->menu, basprintf("boot")); + menu_add_title(bootentries->menu, "boot"); } return bootentries; diff --git a/common/menu.c b/common/menu.c index 64df458e68..e757216c5a 100644 --- a/common/menu.c +++ b/common/menu.c @@ -526,18 +526,17 @@ EXPORT_SYMBOL(menu_add_command_entry); * @display: NULL or pointer to the string which will be freed in this function. * If NULL or zero length string is provided, default title will be added. */ -void menu_add_title(struct menu *m, char *display) +void menu_add_title(struct menu *m, const char *display) { char *tmp, *src, *dst; int lines = 1; int i; - if (!display || !strlen(display)) { - free(display); - display = xasprintf("Menu : %s", m->name ? m->name : ""); - } + if (!display || !strlen(display)) + src = dst = tmp = xasprintf("Menu : %s", m->name ? m->name : ""); + else + src = dst = tmp = xstrdup(display); - src = dst = tmp = xstrdup(display); /* Count lines and separate single string into multiple strings */ while (*src) { if (*src == '\\') { @@ -575,6 +574,5 @@ void menu_add_title(struct menu *m, char *display) } free(tmp); - free(display); } EXPORT_SYMBOL(menu_add_title); -- cgit v1.2.3