2009-05-13 Robert Millan <rmh.grub@aybabtu.com>

* util/i386/pc/grub-setup.c (setup): Restructure code flow to make
        it easier to understand / work with.
This commit is contained in:
robertmh 2009-05-13 20:59:45 +00:00
parent 0ab3a9a46d
commit 15fbf4c442
2 changed files with 28 additions and 22 deletions

View file

@ -1,3 +1,8 @@
2009-05-13 Robert Millan <rmh.grub@aybabtu.com>
* util/i386/pc/grub-setup.c (setup): Restructure code flow to make
it easier to understand / work with.
2009-05-13 Pavel Roskin <proski@gnu.org>
* loader/i386/pc/multiboot2.c: Add necessary includes for

View file

@ -310,15 +310,17 @@ setup (const char *dir,
dos_part, bsd_part);
if (! dest_dev->disk->has_partitions)
{
grub_util_warn ("Attempting to install GRUB to a partitionless disk. This is a BAD idea.");
goto unable_to_embed;
}
if (dest_dev->disk->partition)
grub_util_warn ("Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.");
/* If the destination device can have partitions and it is the MBR,
try to embed the core image into after the MBR. */
if (dest_dev->disk->has_partitions && ! dest_dev->disk->partition)
{
grub_util_warn ("Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.");
goto unable_to_embed;
}
/* Unlike root_dev, with dest_dev we're interested in the partition map even
if dest_dev itself is a whole disk. */
auto int NESTED_FUNC_ATTR identify_partmap (grub_disk_t disk,
@ -333,13 +335,19 @@ setup (const char *dir,
grub_partition_iterate (dest_dev->disk, (strcmp (dest_partmap, "pc_partition_map") ?
find_usable_region_gpt : find_usable_region_msdos));
if (embed_region.end != embed_region.start)
embedding_area_exists = 1;
/* If there is enough space... */
if ((unsigned long) core_sectors <= embed_region.end - embed_region.start)
if (embed_region.end == embed_region.start)
{
grub_util_warn ("Embedding area is not present at all!");
goto unable_to_embed;
}
if ((unsigned long) core_sectors > embed_region.end - embed_region.start)
{
grub_util_warn ("Embedding area is too small for core.img.");
goto unable_to_embed;
}
grub_util_info ("will embed the core image at sector 0x%llx", embed_region.start);
*install_dos_part = grub_cpu_to_le32 (dos_part);
@ -374,15 +382,8 @@ setup (const char *dir,
grub_util_error ("%s", grub_errmsg);
goto finish;
}
}
/* If we reached this point, it means we were unable to embed. */
if (embedding_area_exists)
grub_util_warn ("Embedding area is too small for core.img.");
else
grub_util_warn ("Embedding area is not present at all!");
unable_to_embed:
if (must_embed)
grub_util_error ("Embedding is not possible, but this is required when "