From d9dcb0fbcfa85a312e0796c98abfe24f88422849 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Tue, 13 Dec 2005 16:11:00 +0000 Subject: Fixed a file system driver caching bug corrupting files on certain situations (when reading and writing the same file). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8231 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/file.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'firmware') diff --git a/firmware/common/file.c b/firmware/common/file.c index 01ae17224d..c44f7af809 100644 --- a/firmware/common/file.c +++ b/firmware/common/file.c @@ -543,6 +543,17 @@ static int readwrite(int fd, void* buf, long count, bool write) file->dirty = true; } else { + /* Flush the cache first if it's dirty. */ + if (file->dirty) + { + rc = flush_cache(fd); + if ( rc < 0 ) { + errno = EIO; + return rc * 10 - 8; + } + file->cacheoffset = -1; + } + rc = fat_readwrite(&(file->fatfile), 1, &(file->cache),false); if (rc < 1 ) { DEBUGF("Failed caching sector\n"); -- cgit v1.2.3