summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorHardeep Sidhu <dyp@pobox.com>2003-03-15 21:13:35 +0000
committerHardeep Sidhu <dyp@pobox.com>2003-03-15 21:13:35 +0000
commite5e9bc3e65d34de202b41ca51d8bff117e240830 (patch)
tree6a1041ca3f744d6e2ee7d2ff273117b044b3dfa4 /firmware
parent001226c7e1c20508466f77567607e623ee629389 (diff)
downloadrockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.tar.gz
rockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.zip
Previous change broke read after seek. Reverted that change and added temporary fix in flush_cache to make sure we are on correct sector before writing to disk.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3448 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/common/file.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/firmware/common/file.c b/firmware/common/file.c
index 4443b55bca..d2cad7c647 100644
--- a/firmware/common/file.c
+++ b/firmware/common/file.c
@@ -337,9 +337,15 @@ static int flush_cache(int fd)
{
int rc;
struct filedesc* file = &openfiles[fd];
-
+ int sector = file->fileoffset / SECTOR_SIZE;
+
DEBUGF("Flushing dirty sector cache\n");
+ /* make sure we are on correct sector */
+ rc = fat_seek(&(file->fatfile), sector);
+ if ( rc < 0 )
+ return rc * 10 - 3;
+
rc = fat_readwrite(&(file->fatfile), 1,
file->cache, true );
if ( rc < 0 )
@@ -573,13 +579,6 @@ int lseek(int fd, int offset, int whence)
return rc * 10 - 6;
}
file->cacheoffset = sectoroffset;
-
- /* seek back to current sector */
- rc = fat_seek(&(file->fatfile), newsector);
- if ( rc < 0 ) {
- errno = EIO;
- return rc * 10 - 7;
- }
}
else
file->cacheoffset = -1;