diff options
Diffstat (limited to 'rbutil/ipodpatcher/ipodpatcher.c')
-rw-r--r-- | rbutil/ipodpatcher/ipodpatcher.c | 16 |
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(§orbuf[71],"iPod",4) != 0) && - (memcmp(§orbuf[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; } |