[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2463] 2009-08-01 Vladimir Serbinenko <address@hidden>
From: |
Vladimir Serbinenko |
Subject: |
[2463] 2009-08-01 Vladimir Serbinenko <address@hidden> |
Date: |
Sat, 01 Aug 2009 14:40:31 +0000 |
Revision: 2463
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2463
Author: phcoder
Date: 2009-08-01 14:40:30 +0000 (Sat, 01 Aug 2009)
Log Message:
-----------
2009-08-01 Vladimir Serbinenko <address@hidden>
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'
and 'apart.partmap_size'.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/partmap/apple.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-08-01 14:30:59 UTC (rev 2462)
+++ trunk/grub2/ChangeLog 2009-08-01 14:40:30 UTC (rev 2463)
@@ -1,4 +1,12 @@
2009-08-01 Vladimir Serbinenko <address@hidden>
+
+ 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'
+ and 'apart.partmap_size'.
+
+2009-08-01 Vladimir Serbinenko <address@hidden>
2009-08-01 Robert Millan <address@hidden>
Fix cpuid command.
Modified: trunk/grub2/partmap/apple.c
===================================================================
--- trunk/grub2/partmap/apple.c 2009-08-01 14:30:59 UTC (rev 2462)
+++ trunk/grub2/partmap/apple.c 2009-08-01 14:40:30 UTC (rev 2463)
@@ -30,6 +30,7 @@
/* 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
@@ -105,8 +106,8 @@
struct grub_apple_header aheader;
struct grub_apple_part apart;
struct grub_disk raw;
- int partno = 0;
- unsigned pos = GRUB_DISK_SECTOR_SIZE;
+ int partno = 0, partnum = 0;
+ unsigned pos;
/* Enforce raw disk access. */
raw = *disk;
@@ -126,7 +127,9 @@
goto fail;
}
- for (;;)
+ pos = grub_be_to_cpu16 (aheader.blocksize);
+
+ do
{
if (grub_disk_read (&raw, pos / GRUB_DISK_SECTOR_SIZE,
pos % GRUB_DISK_SECTOR_SIZE,
@@ -142,8 +145,15 @@
break;
}
- part.start = grub_be_to_cpu32 (apart.first_phys_block);
- part.len = grub_be_to_cpu32 (apart.blockcnt);
+ if (partnum == 0)
+ partnum = grub_be_to_cpu32 (apart.partmap_size);
+
+ 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;
@@ -156,15 +166,12 @@
if (hook (disk, &part))
return grub_errno;
- if (grub_be_to_cpu32 (apart.first_phys_block)
- == GRUB_DISK_SECTOR_SIZE * 2)
- return 0;
-
- pos += sizeof (struct grub_apple_part);
+ pos += grub_be_to_cpu16 (aheader.blocksize);
partno++;
}
+ while (partno < partnum);
- if (pos != GRUB_DISK_SECTOR_SIZE)
+ if (partno != 0)
return 0;
fail:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2463] 2009-08-01 Vladimir Serbinenko <address@hidden>,
Vladimir Serbinenko <=