[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[1746] 2008-07-28 Robert Millan <address@hidden>
From: |
Robert Millan |
Subject: |
[1746] 2008-07-28 Robert Millan <address@hidden> |
Date: |
Mon, 28 Jul 2008 22:37:32 +0000 |
Revision: 1746
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1746
Author: robertmh
Date: 2008-07-28 22:37:32 +0000 (Mon, 28 Jul 2008)
Log Message:
-----------
2008-07-28 Robert Millan <address@hidden>
* partmap/apple.c (GRUB_APPLE_HEADER_MAGIC): New macro.
(struct grub_apple_header): New struct. Describes the layout of
the partmap header.
(apple_partition_map_iterate): Check the header magic as well as the
partition magic (which was already being checked).
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/partmap/apple.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2008-07-28 22:35:40 UTC (rev 1745)
+++ trunk/grub2/ChangeLog 2008-07-28 22:37:32 UTC (rev 1746)
@@ -1,3 +1,11 @@
+2008-07-28 Robert Millan <address@hidden>
+
+ * partmap/apple.c (GRUB_APPLE_HEADER_MAGIC): New macro.
+ (struct grub_apple_header): New struct. Describes the layout of
+ the partmap header.
+ (apple_partition_map_iterate): Check the header magic as well as the
+ partition magic (which was already being checked).
+
2008-07-28 Pavel Roskin <address@hidden>
* genmk.rb: Add a warning to the beginning of the output that
Modified: trunk/grub2/partmap/apple.c
===================================================================
--- trunk/grub2/partmap/apple.c 2008-07-28 22:35:40 UTC (rev 1745)
+++ trunk/grub2/partmap/apple.c 2008-07-28 22:37:32 UTC (rev 1746)
@@ -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.");
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [1746] 2008-07-28 Robert Millan <address@hidden>,
Robert Millan <=