diff options
| author | Jörg Hohensohn <hohensoh@rockbox.org> | 2004-10-05 07:55:31 +0000 |
|---|---|---|
| committer | Jörg Hohensohn <hohensoh@rockbox.org> | 2004-10-05 07:55:31 +0000 |
| commit | 540b19dc5074db1abe4f3b982bad1fcbb9d6e20d (patch) | |
| tree | 030c5383e01996110f90ac2074cf71a43418eff9 | |
| parent | 22034ce5c24e37ed3beded07dd99dafe2f44d9e7 (diff) | |
| download | rockbox-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.c | 16 |
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", |