aboutsummaryrefslogtreecommitdiffstats
path: root/src/gfile/inc_fatfs.c
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2014-06-29 16:15:46 +0200
committerJoel Bodenmann <joel@unormal.org>2014-06-29 16:15:46 +0200
commit5c13e08e76ae1d75240e1e8e46d1e9c3a8ba50cd (patch)
treef5c30d5e5c9342d308ff1a20786ea6a86bb04c1f /src/gfile/inc_fatfs.c
parente318ec02d6c3cb96a84679befd0ac447eb597158 (diff)
downloaduGFX-5c13e08e76ae1d75240e1e8e46d1e9c3a8ba50cd.tar.gz
uGFX-5c13e08e76ae1d75240e1e8e46d1e9c3a8ba50cd.tar.bz2
uGFX-5c13e08e76ae1d75240e1e8e46d1e9c3a8ba50cd.zip
added gfileSync() and autosync feature
Diffstat (limited to 'src/gfile/inc_fatfs.c')
-rw-r--r--src/gfile/inc_fatfs.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/gfile/inc_fatfs.c b/src/gfile/inc_fatfs.c
index a9066bf9..447b8a71 100644
--- a/src/gfile/inc_fatfs.c
+++ b/src/gfile/inc_fatfs.c
@@ -29,6 +29,7 @@ static long int fatfsGetSize(GFILE* f);
static bool_t fatfsEOF(GFILE* f);
static bool_t fatfsMount(const char* drive);
static bool_t fatfsUnmount(const char* drive);
+static bool_t fatfsSync(GFILE* f);
static const GFILEVMT FsFatFSVMT = {
GFILE_CHAINHEAD,
@@ -46,7 +47,8 @@ static const GFILEVMT FsFatFSVMT = {
fatfsGetSize,
fatfsEOF,
fatfsMount,
- fatfsUnmount
+ fatfsUnmount,
+ fatfsSync
};
#undef GFILE_CHAINHEAD
@@ -140,6 +142,13 @@ static bool_t fatfsOpen(GFILE* f, const char* fname)
f->obj = (void*)fd;
+ #if !GFILE_NEED_NOAUTOSYNC
+ // no need to sync when not opening for write
+ if (f->flags & GFILEFLG_WRITE) {
+ f_sync( (FIL*)f->obj );
+ }
+ #endif
+
return TRUE;
}
@@ -165,6 +174,7 @@ static int fatfsWrite(GFILE* f, const void* buf, int size)
int wr;
f_write( (FIL*)f->obj, buf, size, (UINT*)&wr);
+ f_sync( (FIL*)f->obj );
return wr;
}
@@ -221,3 +231,15 @@ static bool_t fatfsUnmount(const char* drive)
return FALSE;
}
+static bool_t fatfsSync(GFILE *f)
+{
+ FRESULT ferr;
+
+ ferr = f_sync( (FIL*)f->obj );
+ if (ferr != FR_OK) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+