On Tue, Jul 22, 2008 at 02:10:20AM -0400, Chris Knadle wrote:
> On Monday 21 July 2008, Felix Zielcke wrote:
> > Is this still a problem with grub2 1.96+20080704-2 currently in
> > testing/unstable ?
> 
> I just tried, grub2 1.96+20080704-2 -- I can't even complete installing it (I 
> selected the recommended chain-load):

Please could you try the attached patch?

  If it works (i.e. discards the apple partmap), I would also need a positive
  result (test on a pure apple layout).

  If it doesn't work, please provide a dump of the first 2 sectors of your disk
  (1024 Bytes).

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)
Index: partmap/apple.c
===================================================================
--- partmap/apple.c	(revision 1733)
+++ partmap/apple.c	(working copy)
@@ -1,7 +1,7 @@
 /* apple.c - Read macintosh partition tables.  */
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2002,2004,2005,2006,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2002,2004,2005,2006,2007,2008  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -22,11 +22,19 @@
 #include <grub/mm.h>
 #include <grub/partition.h>
 
+#define GRUB_APPLE_HEADER_MAGIC	0x4552
 #define GRUB_APPLE_PART_MAGIC	0x504D
 
+struct grub_apple_header
+{
+  /* The magic number to identify the partition map, it should have
+     the value `0x4552'.  */
+  grub_uint16_t magic;
+};
+
 struct grub_apple_part
 {
-  /* The magic number to idenify this as a partition, it should have
+  /* The magic number to identify this as a partition, it should have
      the value `0x504D'.  */
   grub_uint16_t magic;
 
@@ -98,6 +106,7 @@
 					  const grub_partition_t partition))
 {
   struct grub_partition part;
+  struct grub_apple_header aheader;
   struct grub_apple_part apart;
   struct grub_disk raw;
   int partno = 0;
@@ -109,6 +118,18 @@
 
   part.partmap = &grub_apple_partition_map;
 
+  if (grub_disk_read (&raw, 0, 0, sizeof (aheader), (char *) &aheader))
+    return grub_errno;
+
+  if (grub_be_to_cpu16 (aheader.magic) != GRUB_APPLE_HEADER_MAGIC)
+    {
+      grub_dprintf ("partition",
+		    "bad magic (found 0x%x; wanted 0x%x\n",
+		    grub_be_to_cpu16 (aheader.magic),
+		    GRUB_APPLE_HEADER_MAGIC);
+      goto fail;
+    }
+
   for (;;)
     {
       if (grub_disk_read (&raw, pos / GRUB_DISK_SECTOR_SIZE,
@@ -147,11 +168,12 @@
       partno++;
     }
 
-  if (pos == GRUB_DISK_SECTOR_SIZE)
-    return grub_error (GRUB_ERR_BAD_PART_TABLE,
-		       "Apple partition map not found.");
+  if (pos != GRUB_DISK_SECTOR_SIZE)
+    return 0;
 
-  return 0;
+ fail:
+  return grub_error (GRUB_ERR_BAD_PART_TABLE,
+		     "Apple partition map not found.");
 }
 
 

Reply via email to