diff options
| author | Hardeep Sidhu <dyp@pobox.com> | 2003-03-15 21:13:35 +0000 |
|---|---|---|
| committer | Hardeep Sidhu <dyp@pobox.com> | 2003-03-15 21:13:35 +0000 |
| commit | e5e9bc3e65d34de202b41ca51d8bff117e240830 (patch) | |
| tree | 6a1041ca3f744d6e2ee7d2ff273117b044b3dfa4 | |
| parent | 001226c7e1c20508466f77567607e623ee629389 (diff) | |
| download | rockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.zip rockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.tar.gz rockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.tar.bz2 rockbox-e5e9bc3e65d34de202b41ca51d8bff117e240830.tar.xz | |
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
| -rw-r--r-- | firmware/common/file.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/firmware/common/file.c b/firmware/common/file.c index 4443b55..d2cad7c 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; |