]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-05-13 Robert Millan <rmh.grub@aybabtu.com>
authorrobertmh <robertmh@localhost>
Wed, 13 May 2009 20:59:45 +0000 (20:59 +0000)
committerrobertmh <robertmh@localhost>
Wed, 13 May 2009 20:59:45 +0000 (20:59 +0000)
        * util/i386/pc/grub-setup.c (setup): Restructure code flow to make
        it easier to understand / work with.

ChangeLog
util/i386/pc/grub-setup.c

index 74b1d3a324ef6fed1f0d56f7a538ae5a2fc7d5a1..412d55043342e1d297cc02435e84d21431ab78b9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index f0f79f419ae4b641b7b795c4777d3c5ddf3f30e4..3b23446f8b85601ca8837de85ab82d10e7a01ff2 100644 (file)
@@ -310,17 +310,19 @@ 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.");
+      goto unable_to_embed;
+    }
   
-  /* 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)
-    {
       /* Unlike root_dev, with dest_dev we're interested in the partition map even
-        if dest_dev itself is a whole disk.  */
+         if dest_dev itself is a whole disk.  */
       auto int NESTED_FUNC_ATTR identify_partmap (grub_disk_t disk,
                                                  const grub_partition_t p);
       int NESTED_FUNC_ATTR identify_partmap (grub_disk_t disk __attribute__ ((unused)),
@@ -330,16 +332,22 @@ setup (const char *dir,
          return 1;
        }
       grub_partition_iterate (dest_dev->disk, identify_partmap);
-
+      
       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 "