summaryrefslogtreecommitdiff
path: root/firmware/common/file.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-11-17 02:34:17 +0000
committerJens Arnold <amiconn@rockbox.org>2004-11-17 02:34:17 +0000
commitf78524bf93b1c29ce5ec122f33c34b3a85745890 (patch)
tree366ffe79e56db172f08f1280d4f4cd0843c485d1 /firmware/common/file.c
parent0b959cf8be43acc17b74df5054b7818913e89a9e (diff)
downloadrockbox-f78524bf93b1c29ce5ec122f33c34b3a85745890.tar.gz
rockbox-f78524bf93b1c29ce5ec122f33c34b3a85745890.zip
Bug fix: Do only flush the sector buffer after writing head bytes if it really needs to be. The old code did flush always, causing the huge slowdown of fprintf() and other places writing byte-wise
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5413 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common/file.c')
-rw-r--r--firmware/common/file.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/firmware/common/file.c b/firmware/common/file.c
index 623e898257..81b5a194c0 100644
--- a/firmware/common/file.c
+++ b/firmware/common/file.c
@@ -457,18 +457,15 @@ static int readwrite(int fd, void* buf, int count, bool write)
457 nread = headbytes; 457 nread = headbytes;
458 count -= headbytes; 458 count -= headbytes;
459 } 459 }
460 460
461 /* if buffer has been modified, write it back to disk */ 461 /* If the buffer has been modified, either it has been flushed already
462 if (nread && file->dirty) { 462 * (if (offs+headbytes == SECTOR_SIZE)...) or does not need to be (no
463 rc = flush_cache(fd); 463 * more data to follow in this call). Do NOT flush here. */
464 if (rc < 0)
465 return rc * 10 - 3;
466 }
467 464
468 /* read/write whole sectors right into/from the supplied buffer */ 465 /* read/write whole sectors right into/from the supplied buffer */
469 sectors = count / SECTOR_SIZE; 466 sectors = count / SECTOR_SIZE;
470 if ( sectors ) { 467 if ( sectors ) {
471 int rc = fat_readwrite(&(file->fatfile), sectors, 468 int rc = fat_readwrite(&(file->fatfile), sectors,
472 (unsigned char*)buf+nread, write ); 469 (unsigned char*)buf+nread, write );
473 if ( rc < 0 ) { 470 if ( rc < 0 ) {
474 DEBUGF("Failed read/writing %d sectors\n",sectors); 471 DEBUGF("Failed read/writing %d sectors\n",sectors);