From d772977c65138f43fcb14bcf944d1f6ca55b4a1a Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Fri, 15 Dec 2006 15:52:08 +0000 Subject: Windows appears to require sector-aligned reads, which wasn't happening everywhere for ipods with 2048-byte sectors. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11770 a1c6a512-1295-4272-9138-f99709370657 --- tools/ipodpatcher/ipodpatcher.c | 70 +++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 23 deletions(-) (limited to 'tools/ipodpatcher') diff --git a/tools/ipodpatcher/ipodpatcher.c b/tools/ipodpatcher/ipodpatcher.c index ad5d5c7d0f..d4b7731747 100644 --- a/tools/ipodpatcher/ipodpatcher.c +++ b/tools/ipodpatcher/ipodpatcher.c @@ -475,6 +475,7 @@ int add_bootloader(HANDLE dh, char* filename, int start, int sector_size, { int length; int i; + int x; int n; int infile; int paddedlength; @@ -625,27 +626,28 @@ int add_bootloader(HANDLE dh, char* filename, int start, int sector_size, fprintf(stderr,"[INFO] Wrote %d bytes to firmware partition\n",entryOffset+paddedlength); + x = diroffset % sector_size; /* Read directory */ - if (ipod_seek(dh,start + diroffset) < 0) { return -1; } + if (ipod_seek(dh,start + diroffset - x) < 0) { return -1; } n=ipod_read(dh, sectorbuf, sector_size); if (n < 0) { return -1; } /* Update entries for image 0 */ - int2le(entryOffset+length,sectorbuf+16); - int2le(entryOffset,sectorbuf+24); - int2le(chksum,sectorbuf+28); + int2le(entryOffset+length,sectorbuf+x+16); + int2le(entryOffset,sectorbuf+x+24); + int2le(chksum,sectorbuf+x+28); /* Update devOffset entries for other images, if we have moved them */ if (delta > 0) { for (i=1;i