summaryrefslogtreecommitdiffstats
path: root/rbutil/ipodpatcher/ipodpatcher.c
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2007-05-22 19:07:45 +0000
committerDave Chapman <dave@dchapman.com>2007-05-22 19:07:45 +0000
commit4df0c7795407966afb468a941aae1ea695d70cae (patch)
tree282e9b90f013efed66723d08a2ce6760319e35a2 /rbutil/ipodpatcher/ipodpatcher.c
parent7d79db2ab22f99dba034fd64af9157eb67aa20e3 (diff)
downloadrockbox-4df0c7795407966afb468a941aae1ea695d70cae.tar.gz
rockbox-4df0c7795407966afb468a941aae1ea695d70cae.tar.bz2
rockbox-4df0c7795407966afb468a941aae1ea695d70cae.zip
Remove the check for ipod-specific magic in the MBR (which caused problems when users repartitioned their ipods and removed that magic) and instead check that the partition layout looks like an ipod.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13469 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/ipodpatcher/ipodpatcher.c')
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/rbutil/ipodpatcher/ipodpatcher.c b/rbutil/ipodpatcher/ipodpatcher.c
index 331c7f0322..2be6d2333c 100644
--- a/rbutil/ipodpatcher/ipodpatcher.c
+++ b/rbutil/ipodpatcher/ipodpatcher.c
@@ -172,12 +172,6 @@ int read_partinfo(struct ipod_t* ipod, int silent)
if ((sectorbuf[510] == 0x55) && (sectorbuf[511] == 0xaa)) {
/* DOS partition table */
- if ((memcmp(&sectorbuf[71],"iPod",4) != 0) &&
- (memcmp(&sectorbuf[0x40],"This is your Apple iPod. You probably do not want to boot from it!",66) != 0) ) {
- if (!silent) fprintf(stderr,"[ERR] Drive is not an iPod, aborting\n");
- return -1;
- }
-
ipod->macpod = 0;
/* parse partitions */
for ( i = 0; i < 4; i++ ) {
@@ -259,6 +253,16 @@ int read_partinfo(struct ipod_t* ipod, int silent)
return -1;
}
+ /* Check that the partition table looks like an ipod:
+ 1) Partition 1 is of type 0 (Empty) but isn't empty.
+ 2) Partition 2 is of type 0xb (winpod) or -1 (macpod)
+ */
+ if ((ipod->pinfo[0].type != 0) || (ipod->pinfo[0].size == 0) ||
+ ((ipod->pinfo[1].type != 0xb) && (ipod->pinfo[1].type != -1))) {
+ if (!silent) fprintf(stderr,"[ERR] Partition layout is not an ipod\n");
+ return -1;
+ }
+
ipod->start = ipod->pinfo[0].start*ipod->sector_size;
return 0;
}