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) | |||
172 | 172 | ||
173 | if ((sectorbuf[510] == 0x55) && (sectorbuf[511] == 0xaa)) { | 173 | if ((sectorbuf[510] == 0x55) && (sectorbuf[511] == 0xaa)) { |
174 | /* DOS partition table */ | 174 | /* DOS partition table */ |
175 | if ((memcmp(§orbuf[71],"iPod",4) != 0) && | ||
176 | (memcmp(§orbuf[0x40],"This is your Apple iPod. You probably do not want to boot from it!",66) != 0) ) { | ||
177 | if (!silent) fprintf(stderr,"[ERR] Drive is not an iPod, aborting\n"); | ||
178 | return -1; | ||
179 | } | ||
180 | |||
181 | ipod->macpod = 0; | 175 | ipod->macpod = 0; |
182 | /* parse partitions */ | 176 | /* parse partitions */ |
183 | for ( i = 0; i < 4; i++ ) { | 177 | for ( i = 0; i < 4; i++ ) { |
@@ -259,6 +253,16 @@ int read_partinfo(struct ipod_t* ipod, int silent) | |||
259 | return -1; | 253 | return -1; |
260 | } | 254 | } |
261 | 255 | ||
256 | /* Check that the partition table looks like an ipod: | ||
257 | 1) Partition 1 is of type 0 (Empty) but isn't empty. | ||
258 | 2) Partition 2 is of type 0xb (winpod) or -1 (macpod) | ||
259 | */ | ||
260 | if ((ipod->pinfo[0].type != 0) || (ipod->pinfo[0].size == 0) || | ||
261 | ((ipod->pinfo[1].type != 0xb) && (ipod->pinfo[1].type != -1))) { | ||
262 | if (!silent) fprintf(stderr,"[ERR] Partition layout is not an ipod\n"); | ||
263 | return -1; | ||
264 | } | ||
265 | |||
262 | ipod->start = ipod->pinfo[0].start*ipod->sector_size; | 266 | ipod->start = ipod->pinfo[0].start*ipod->sector_size; |
263 | return 0; | 267 | return 0; |
264 | } | 268 | } |