2006-11-11 Jeroen Dekkers <jeroen@dekkers.cx>

* kern/disk.c (grub_disk_read): When there is a read error, always
	try to read only the necessary data.

	* conf/i386-pc.rmk (grub_probe_SOURCES): Add disk/lvm.c and
	disk/raid.c.
	* include/grub/disk.h [GRUB_UTIL] (grub_raid_init): New
	prototype.
	[GRUB_UTIL] (grub_raid_fini): Likewise.
	[GRUB_UTIL] (grub_lvm_init): Likewise.
	[GRUB_UTIL] (grub_lvm_fini): Likewise.
	* util/i386/pc/grub-probe.c (probe): Check whether DEVICE_NAME is
	RAID device and copy DEVICE_NAME to DRIVE_NAME in that case.
	(main): Call grub_raid_init(), grub_lvm_init(), grub_lvm_fini()
	and grub_raid_fini().
This commit is contained in:
jeroen 2006-11-10 23:31:55 +00:00
parent 03e58196a8
commit 790707f254
6 changed files with 56 additions and 17 deletions

View file

@ -97,13 +97,21 @@ probe (const char *path)
goto end;
}
drive_name = grub_util_biosdisk_get_grub_dev (device_name);
if (! drive_name)
if (device_name[0] == 'm' && device_name[1] == 'd'
&& device_name[2] >= '0' && device_name[2] <= '9')
{
fprintf (stderr, "cannot find a GRUB drive for %s.\n", device_name);
goto end;
drive_name = xstrdup (device_name);
}
else
{
drive_name = grub_util_biosdisk_get_grub_dev (device_name);
if (! drive_name)
{
fprintf (stderr, "cannot find a GRUB drive for %s.\n", device_name);
goto end;
}
}
if (print == PRINT_DRIVE)
{
printf ("(%s)\n", drive_name);
@ -236,7 +244,9 @@ main (int argc, char *argv[])
/* Initialize the emulated biosdisk driver. */
grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
grub_pc_partition_map_init ();
grub_raid_init ();
grub_lvm_init ();
/* Initialize filesystems. */
grub_fat_init ();
grub_ext2_init ();
@ -256,6 +266,8 @@ main (int argc, char *argv[])
grub_jfs_fini ();
grub_xfs_fini ();
grub_lvm_fini ();
grub_raid_fini ();
grub_pc_partition_map_fini ();
grub_util_biosdisk_fini ();