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."); }