On 03.03.2012 19:10, Andreas Vogel wrote:
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.
No need. When timeout is reached the submenu is executed and first element is discarded and the rest is searched for again.

--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to