All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Support Apple partition map with sector size different from 512 bytes.
@ 2009-07-28 10:40 Vladimir 'phcoder' Serbinenko
  2009-07-28 11:28 ` Vladimir 'phcoder' Serbinenko
  2009-07-28 18:16 ` Robert Millan
  0 siblings, 2 replies; 5+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-07-28 10:40 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 106 bytes --]

-- 
Regards
Vladimir 'phcoder' Serbinenko

Personal git repository: http://repo.or.cz/w/grub2/phcoder.git

[-- Attachment #2: applemap.diff --]
[-- Type: text/plain, Size: 2106 bytes --]

diff --git a/ChangeLog b/ChangeLog
index 752bde8..1502765 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-07-28  Vladimir Serbinenko  <phcoder@gmail.com>
+
+	Support Apple partition map with sector size different from 512 bytes.
+
+	* partmap/apple.c (grub_apple_header): New field 'blocksize'.
+	(apple_partition_map_iterate): Respect 'aheader.blocksize'
+
 2009-07-25  Felix Zielcke  <fzielcke@z-51.de>
 
 	* kern/file.c (grub_file_open): Revert to previous check with
diff --git a/partmap/apple.c b/partmap/apple.c
index fce2f2c..c317908 100644
--- a/partmap/apple.c
+++ b/partmap/apple.c
@@ -30,6 +30,7 @@ struct grub_apple_header
   /* The magic number to identify the partition map, it should have
      the value `0x4552'.  */
   grub_uint16_t magic;
+  grub_uint16_t blocksize;
 };
 
 struct grub_apple_part
@@ -106,7 +107,7 @@ apple_partition_map_iterate (grub_disk_t disk,
   struct grub_apple_part apart;
   struct grub_disk raw;
   int partno = 0;
-  unsigned pos = GRUB_DISK_SECTOR_SIZE;
+  unsigned pos;
 
   /* Enforce raw disk access.  */
   raw = *disk;
@@ -126,6 +127,8 @@ apple_partition_map_iterate (grub_disk_t disk,
       goto fail;
     }
 
+  pos = grub_be_to_cpu16 (aheader.blocksize);
+
   for (;;)
     {
       if (grub_disk_read (&raw, pos / GRUB_DISK_SECTOR_SIZE,
@@ -142,8 +145,12 @@ apple_partition_map_iterate (grub_disk_t disk,
 	  break;
 	}
 
-      part.start = grub_be_to_cpu32 (apart.first_phys_block);
-      part.len = grub_be_to_cpu32 (apart.blockcnt);
+      part.start = ((grub_disk_addr_t) grub_be_to_cpu32 (apart.first_phys_block)
+		    * grub_be_to_cpu16 (aheader.blocksize))
+	/ GRUB_DISK_SECTOR_SIZE;
+      part.len = ((grub_disk_addr_t) grub_be_to_cpu32 (apart.blockcnt)
+		  * grub_be_to_cpu16 (aheader.blocksize))
+	/ GRUB_DISK_SECTOR_SIZE;
       part.offset = pos;
       part.index = partno;
 
@@ -160,7 +167,7 @@ apple_partition_map_iterate (grub_disk_t disk,
 	  == GRUB_DISK_SECTOR_SIZE * 2)
 	return 0;
 
-      pos += sizeof (struct grub_apple_part);
+      pos += grub_be_to_cpu16 (aheader.blocksize);
       partno++;
     }
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-07-29 18:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-28 10:40 [PATCH] Support Apple partition map with sector size different from 512 bytes Vladimir 'phcoder' Serbinenko
2009-07-28 11:28 ` Vladimir 'phcoder' Serbinenko
2009-07-28 18:16 ` Robert Millan
2009-07-28 21:10   ` Vladimir 'phcoder' Serbinenko
2009-07-29 18:15     ` Vladimir 'phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.