summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-07-16 22:28:24 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-07-16 22:28:24 +0000
commit41249b7059be332fb41099456fca26300297bdc2 (patch)
tree60f3212221aa3629dc610503c3a5b5a74f4e4e43
parent50192e87dc27d7b81bcba1f643bcea6f0c0428f2 (diff)
downloadrockbox-41249b7059be332fb41099456fca26300297bdc2.zip
rockbox-41249b7059be332fb41099456fca26300297bdc2.tar.gz
rockbox-41249b7059be332fb41099456fca26300297bdc2.tar.bz2
rockbox-41249b7059be332fb41099456fca26300297bdc2.tar.xz
Fixed a bug that included the reserved clusters 0 and 1 in the search for available clusters. That could in some cases lead to a bogus disk-full error.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3836 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/fat.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c
index 92ac2a3..099417b 100644
--- a/firmware/drivers/fat.c
+++ b/firmware/drivers/fat.c
@@ -546,10 +546,17 @@ static void *cache_fat_sector(int fatsector)
static unsigned int find_free_cluster(unsigned int startcluster)
{
- unsigned int sector = startcluster / CLUSTERS_PER_FAT_SECTOR;
- unsigned int offset = startcluster % CLUSTERS_PER_FAT_SECTOR;
+ unsigned int sector;
+ unsigned int offset;
unsigned int i;
+ /* Cluster 0 and 1 are reserved */
+ if(startcluster < 2)
+ startcluster = 2;
+
+ sector = startcluster / CLUSTERS_PER_FAT_SECTOR;
+ offset = startcluster % CLUSTERS_PER_FAT_SECTOR;
+
for (i = 0; i<fat_bpb.fatsize; i++) {
unsigned int j;
unsigned int nr = (i + sector) % fat_bpb.fatsize;