summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Hohensohn <hohensoh@rockbox.org>2004-10-05 07:55:31 +0000
committerJörg Hohensohn <hohensoh@rockbox.org>2004-10-05 07:55:31 +0000
commit540b19dc5074db1abe4f3b982bad1fcbb9d6e20d (patch)
tree030c5383e01996110f90ac2074cf71a43418eff9
parent22034ce5c24e37ed3beded07dd99dafe2f44d9e7 (diff)
downloadrockbox-540b19dc5074db1abe4f3b982bad1fcbb9d6e20d.zip
rockbox-540b19dc5074db1abe4f3b982bad1fcbb9d6e20d.tar.gz
rockbox-540b19dc5074db1abe4f3b982bad1fcbb9d6e20d.tar.bz2
rockbox-540b19dc5074db1abe4f3b982bad1fcbb9d6e20d.tar.xz
panic on write behind partition, too
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5171 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/fat.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c
index d9aecd8..4bf76bf 100644
--- a/firmware/drivers/fat.c
+++ b/firmware/drivers/fat.c
@@ -1861,9 +1861,8 @@ static int transfer( unsigned int start, int count, char* buf, bool write )
{
int rc;
- start += fat_bpb.startsector; /* offset by partition location */
-
- LDEBUGF("transfer(s=%x, c=%x, %s)\n",start, count, write?"write":"read");
+ LDEBUGF("transfer(s=%x, c=%x, %s)\n",
+ start+ fat_bpb.startsector, count, write?"write":"read");
if (write) {
unsigned int firstallowed;
#ifdef HAVE_FAT16SUPPORT
@@ -1873,12 +1872,15 @@ static int transfer( unsigned int start, int count, char* buf, bool write )
#endif
firstallowed = fat_bpb.firstdatasector;
- if (start < firstallowed + fat_bpb.startsector)
- panicf("Writing before data\n");
- rc = ata_write_sectors(start, count, buf);
+ if (start < firstallowed)
+ panicf("Write %d before data\n", firstallowed - start);
+ if (start + count > fat_bpb.totalsectors)
+ panicf("Write %d after data\n",
+ start + count - fat_bpb.totalsectors);
+ rc = ata_write_sectors(start + fat_bpb.startsector, count, buf);
}
else
- rc = ata_read_sectors(start, count, buf);
+ rc = ata_read_sectors(start + fat_bpb.startsector, count, buf);
if (rc < 0) {
DEBUGF( "transfer() - Couldn't %s sector %x"
" (error code %d)\n",