]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Merge mainline into nestpart
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 6 Feb 2010 20:03:32 +0000 (21:03 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 6 Feb 2010 20:03:32 +0000 (21:03 +0100)
1  2 
partmap/sun.c

diff --cc partmap/sun.c
index 6f8945026ec5757eab362420df0bc123da3ff728,df9adb0c0d55b0d5c0fe1560c3782bdc8a085e48..f3801bc8804b650c77e8d443fab5cbcc645ddfef
@@@ -88,44 -88,60 +88,55 @@@ sun_partition_map_iterate (grub_disk_t 
                                        const grub_partition_t partition))
  {
    grub_partition_t p;
 -  struct grub_disk raw;
    struct grub_sun_block block;
    int partnum;
+   grub_err_t err;
  
 -  raw = *disk;
 -  raw.partition = 0;
 -
    p = (grub_partition_t) grub_zalloc (sizeof (struct grub_partition));
    if (! p)
      return grub_errno;
  
    p->partmap = &grub_sun_partition_map;
-   if (grub_disk_read (disk, 0, 0, sizeof (struct grub_sun_block),
-                     &block) == GRUB_ERR_NONE)
 -  err = grub_disk_read (&raw, 0, 0, sizeof (struct grub_sun_block),
++  err = grub_disk_read (disk, 0, 0, sizeof (struct grub_sun_block),
+                       &block);
+   if (err)
      {
-       if (GRUB_PARTMAP_SUN_MAGIC != grub_be_to_cpu16 (block.magic))
-       grub_error (GRUB_ERR_BAD_PART_TABLE, "not a sun partition table");
+       grub_free (p);
+       return err;
+     }
  
-       if (! grub_sun_is_valid (&block))
-       grub_error (GRUB_ERR_BAD_PART_TABLE, "invalid checksum");
+   if (GRUB_PARTMAP_SUN_MAGIC != grub_be_to_cpu16 (block.magic))
+     {
+       grub_free (p);
 -      return grub_error (GRUB_ERR_BAD_PART_TABLE,
 -                       "not a sun partition table");
++      return grub_error (GRUB_ERR_BAD_PART_TABLE, "not a sun partition table");
+     }
  
-       /* Maybe another error value would be better, because partition
-        table _is_ recognized but invalid.  */
-       for (partnum = 0; partnum < GRUB_PARTMAP_SUN_MAX_PARTS; partnum++)
+   if (! grub_sun_is_valid (&block))
+     {
 -      grub_free (p);
++      grub_free (p);      
+       return grub_error (GRUB_ERR_BAD_PART_TABLE, "invalid checksum");
+     }
+   /* Maybe another error value would be better, because partition
+      table _is_ recognized but invalid.  */
+   for (partnum = 0; partnum < GRUB_PARTMAP_SUN_MAX_PARTS; partnum++)
+     {
+       struct grub_sun_partition_descriptor *desc;
 -      
++
+       if (block.infos[partnum].id == 0
+         || block.infos[partnum].id == GRUB_PARTMAP_SUN_WHOLE_DISK_ID)
+       continue;
+       desc = &block.partitions[partnum];
+       p->start = ((grub_uint64_t) grub_be_to_cpu32 (desc->start_cylinder)
+                 * grub_be_to_cpu16 (block.ntrks)
+                 * grub_be_to_cpu16 (block.nsect));
+       p->len = grub_be_to_cpu32 (desc->num_sectors);
 -      p->index = partnum;
++      p->number = p->index = partnum;
+       if (p->len)
        {
-         struct grub_sun_partition_descriptor *desc;
-         if (block.infos[partnum].id == 0
-             || block.infos[partnum].id == GRUB_PARTMAP_SUN_WHOLE_DISK_ID)
-           continue;
-         desc = &block.partitions[partnum];
-         p->start = ((grub_uint64_t) grub_be_to_cpu32 (desc->start_cylinder)
-                     * grub_be_to_cpu16 (block.ntrks)
-                     * grub_be_to_cpu16 (block.nsect));
-         p->len = grub_be_to_cpu32 (desc->num_sectors);
-         p->number = p->index = partnum;
-         if (p->len)
-           {
-             if (hook (disk, p))
-               partnum = GRUB_PARTMAP_SUN_MAX_PARTS;
-           }
+         if (hook (disk, p))
+           partnum = GRUB_PARTMAP_SUN_MAX_PARTS;
        }
      }