Hi,
This code in menu.c::menuentry_eq() looks wrong:
{
const char *ptr1, *ptr2;
ptr1 = title;
ptr2 = spec;
while (1)
{
if (*ptr2 == '>'&& ptr2[1] != '>'&& *ptr1 == 0)
return 1;
if (*ptr2 == '>'&& ptr2[1] != '>')
return 0;
if (*ptr2 == '>')
ptr2++;
if (*ptr1 != *ptr2)
return 0;
if (*ptr1 == 0)<----
return 1;
ptr1++;
ptr2++;
}
}
Specifically, if there are two menuentries that differ by adding characters,
this function will match the wrong one, i.e.:
set default='entry a with more words'
menuentry "entry a" {
}
menuentry "entry a with more words" {
}
As far as I understand the code, using submenu references in the default
variable for automatic booting is not working at all.
This is due to the dynamic loading of submenus. When a menu is opened
and run, only the direct menu entries are known. Searching for menu
entries deeper in the menu tree is not done.