diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2003-07-16 22:28:24 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2003-07-16 22:28:24 +0000 |
| commit | 41249b7059be332fb41099456fca26300297bdc2 (patch) | |
| tree | 60f3212221aa3629dc610503c3a5b5a74f4e4e43 | |
| parent | 50192e87dc27d7b81bcba1f643bcea6f0c0428f2 (diff) | |
| download | rockbox-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.c | 11 |
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; |