diff --git a/ChangeLog b/ChangeLog index f7dc6f2d1..4894deb76 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-08 Robert Millan + + * kern/device.c (grub_device_iterate): Do not abort device iteration + when one of the devices cannot be opened. + * kern/disk.c (grub_disk_open): Do not account previous failures of + unrelated functions when grub_errno is checked for. + 2008-01-08 Robert Millan * loader/i386/pc/linux.c (grub_rescue_cmd_linux): For diff --git a/kern/device.c b/kern/device.c index 197ece69e..a39fdcecb 100644 --- a/kern/device.c +++ b/kern/device.c @@ -1,7 +1,7 @@ /* device.c - device manager */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2005,2007 Free Software Foundation, Inc. + * Copyright (C) 2002,2005,2007,2008 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -95,7 +95,7 @@ grub_device_iterate (int (*hook) (const char *name)) dev = grub_device_open (disk_name); if (! dev) - return 1; + return 0; if (dev->disk && dev->disk->has_partitions) if (grub_partition_iterate (dev->disk, iterate_partition)) diff --git a/kern/disk.c b/kern/disk.c index 9e0f60b07..e08263e65 100644 --- a/kern/disk.c +++ b/kern/disk.c @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004,2006,2007 Free Software Foundation, Inc. + * Copyright (C) 2002,2003,2004,2006,2007,2008 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -217,6 +217,9 @@ grub_disk_open (const char *name) char *raw = (char *) name; unsigned long current_time; + /* Do not account previous failures when grub_errno is checked for. */ + grub_errno = GRUB_ERR_NONE; + grub_dprintf ("disk", "Opening `%s'...\n", name); disk = (grub_disk_t) grub_malloc (sizeof (*disk));