--- grub-core/commands/menuentry.c | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c index 720e6d8ea..c40b27d8b 100644 --- a/grub-core/commands/menuentry.c +++ b/grub-core/commands/menuentry.c @@ -43,6 +43,9 @@ static const struct grub_arg_option options[] = anyone can boot it. */ {"unrestricted", 0, 0, N_("This entry can be booted by any user."), 0, ARG_TYPE_NONE}, + {"menutitle", 0, 0, + N_("Use STRING as menu title. When omitted, use the entry label."), + N_("TITLE"), ARG_TYPE_STRING}, {0, 0, 0, 0, 0, 0} }; @@ -252,12 +255,46 @@ setparams_prefix (int argc, char **args) return result; } +static char * +menutitle_prefix (char *old_prefix, const char *title) +{ + const char *t; + char *p; + char *result; + grub_size_t len = 22; + grub_size_t old_len = grub_strlen (old_prefix); + + /* Count resulting string length. */ + for (t = title; *t; t++) + { + len += (*t++ == '\'' ? 4 : 1); + } + + result = grub_malloc (old_len + len + 2); + if (! result) + return 0; + + p = result; + grub_strcpy (p, old_prefix); + p = result + old_len; + grub_strcpy (p, "set grub_menu_title='"); + p += 21; + + p = grub_strchrsub (p, title, '\'', "'\\''"); + *p++ = '\''; + *p++ = '\n'; + *p = '\0'; + + return result; +} + static grub_err_t grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args) { char ch; char *src; char *prefix; + char *old_prefix; unsigned len; grub_err_t r; const char *users; @@ -299,6 +336,19 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args) if (! prefix) return grub_errno; + /* Prepend the menu title line. */ + if (ctxt->state[6].arg) + { + old_prefix = prefix; + prefix = menutitle_prefix (old_prefix, + (ctxt->state[6].arg + && grub_strlen(ctxt->state[6].arg) > 0) + ? ctxt->state[6].arg : args[0]); + if (! prefix) + return grub_errno; + grub_free(old_prefix); + } + r = grub_normal_add_menu_entry (argc - 1, (const char **) args, ctxt->state[0].args, ctxt->state[4].arg, users, -- 2.45.3 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel