On Wed, Aug 27, 2008 at 08:24:11AM +0930, Arthur Marsh wrote: > > The following error makes sense for a floppy drive with no disk in it,
Well, I'm still not sure what it's caused by. The problem I see now is that the design of grub_find_drive() prevents us from detecting NULL pointers as errors, and so we don't know if `name' was NULL or otherwise a non-NULL drive was paired with a NULL device. So please, try with this patch (in addition to what you had before). I realize this is getting annoyingly long; thanks for your patience in going through it, it's very appreciated. -- Robert Millan The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and how) you may access your data; but nobody's threatening your freedom: we still allow you to remove your data and not access it at all."
Index: util/biosdisk.c =================================================================== --- util/biosdisk.c (revision 1830) +++ util/biosdisk.c (working copy) @@ -120,17 +120,21 @@ if (map[i].drive && ! strcmp (map[i].drive, name)) return i; } - else - { - for (i = 0; i < sizeof (map) / sizeof (map[0]); i++) - if (! map[i].drive) - return i; - } return -1; } static int +find_free_slot () +{ + for (i = 0; i < sizeof (map) / sizeof (map[0]); i++) + if (! map[i].drive) + return i; + + return -1; +} + +static int grub_util_biosdisk_iterate (int (*hook) (const char *name)) { unsigned i; @@ -503,7 +507,7 @@ p++; /* Find a free slot. */ - drive = find_grub_drive (NULL); + drive = find_free_slot (); if (drive < 0) show_error ("Map table size exceeded");