From 5c13e08e76ae1d75240e1e8e46d1e9c3a8ba50cd Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sun, 29 Jun 2014 16:15:46 +0200 Subject: added gfileSync() and autosync feature --- src/gfile/inc_fatfs.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/gfile/inc_fatfs.c') 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; +} + -- cgit v1.2.3