summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-03-04 13:50:23 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-03-04 13:50:23 +0000
commit16d1a68b331676b06d37b998363ab722666f3dae (patch)
tree738b6ec2ed70e8736ef9f94eb7b4471b1e0f4b61
parent2573879fb13c1544ec0e07f6ce1da1d45f3d97a7 (diff)
downloadrockbox-16d1a68b331676b06d37b998363ab722666f3dae.tar.gz
rockbox-16d1a68b331676b06d37b998363ab722666f3dae.zip
update_fat_entry() set the wrong cache line dirty if bpb_resvdseccnt wasn't divisible by 32 (didn't compensate for the reserved sector count)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3379 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/fat.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c
index f41f039380..cfff3e869c 100644
--- a/firmware/drivers/fat.c
+++ b/firmware/drivers/fat.c
@@ -457,11 +457,6 @@ static int bpb_is_sane(void)
457 fat_bpb.bpb_bytspersec * fat_bpb.bpb_secperclus); 457 fat_bpb.bpb_bytspersec * fat_bpb.bpb_secperclus);
458 return -2; 458 return -2;
459 } 459 }
460 if (fat_bpb.bpb_rsvdseccnt != 32)
461 {
462 DEBUGF( "bpb_is_sane() - Warning: Reserved sectors is not 32 (%d)\n",
463 fat_bpb.bpb_rsvdseccnt);
464 }
465 if(fat_bpb.bpb_numfats != 2) 460 if(fat_bpb.bpb_numfats != 2)
466 { 461 {
467 DEBUGF( "bpb_is_sane() - Warning: NumFATS is not 2 (%d)\n", 462 DEBUGF( "bpb_is_sane() - Warning: NumFATS is not 2 (%d)\n",
@@ -602,7 +597,7 @@ static int update_fat_entry(unsigned int entry, unsigned int val)
602 DEBUGF( "update_entry() - Could not cache sector %d\n", sector); 597 DEBUGF( "update_entry() - Could not cache sector %d\n", sector);
603 return -1; 598 return -1;
604 } 599 }
605 fat_cache[sector & FAT_CACHE_MASK].dirty = true; 600 fat_cache[(sector + fat_bpb.bpb_rsvdseccnt) & FAT_CACHE_MASK].dirty = true;
606 601
607 if ( val ) { 602 if ( val ) {
608 if (!(SWAB32(sec[offset]) & 0x0fffffff)) 603 if (!(SWAB32(sec[offset]) & 0x0fffffff))
@@ -1443,7 +1438,6 @@ int fat_rename(struct fat_file* file,
1443 return 0; 1438 return 0;
1444} 1439}
1445 1440
1446
1447static int next_write_cluster(struct fat_file* file, 1441static int next_write_cluster(struct fat_file* file,
1448 int oldcluster, 1442 int oldcluster,
1449 int* newsector) 1443 int* newsector)
@@ -1467,7 +1461,7 @@ static int next_write_cluster(struct fat_file* file,
1467 update_fat_entry(oldcluster, cluster); 1461 update_fat_entry(oldcluster, cluster);
1468 else 1462 else
1469 file->firstcluster = cluster; 1463 file->firstcluster = cluster;
1470 update_fat_entry(cluster, FAT_EOF_MARK); 1464 update_fat_entry(cluster, FAT_EOF_MARK);
1471 } 1465 }
1472 else { 1466 else {
1473#ifdef TEST_FAT 1467#ifdef TEST_FAT
@@ -1611,7 +1605,6 @@ int fat_seek(struct fat_file *file, unsigned int seeksector )
1611 clusternum = seeksector / fat_bpb.bpb_secperclus; 1605 clusternum = seeksector / fat_bpb.bpb_secperclus;
1612 sectornum = seeksector % fat_bpb.bpb_secperclus; 1606 sectornum = seeksector % fat_bpb.bpb_secperclus;
1613 1607
1614
1615 for (i=0; i<clusternum; i++) { 1608 for (i=0; i<clusternum; i++) {
1616 cluster = get_next_cluster(cluster); 1609 cluster = get_next_cluster(cluster);
1617 if (!cluster) { 1610 if (!cluster) {