From 6e13c0fb394cfb98240e895353e060595a7a8bee Mon Sep 17 00:00:00 2001 From: Alexander Somov Date: Wed, 29 Nov 2023 18:05:25 +0300 Subject: [PATCH] Add fsync() support to SPIFFS VFS driver --- components/spiffs/esp_spiffs.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/components/spiffs/esp_spiffs.c b/components/spiffs/esp_spiffs.c index 5731b322b7a..45c7d8b1cbd 100644 --- a/components/spiffs/esp_spiffs.c +++ b/components/spiffs/esp_spiffs.c @@ -58,6 +58,7 @@ static ssize_t vfs_spiffs_read(void* ctx, int fd, void * dst, size_t size); static int vfs_spiffs_close(void* ctx, int fd); static off_t vfs_spiffs_lseek(void* ctx, int fd, off_t offset, int mode); static int vfs_spiffs_fstat(void* ctx, int fd, struct stat * st); +static int vfs_spiffs_fsync(void* ctx, int fd); #ifdef CONFIG_VFS_SUPPORT_DIR static int vfs_spiffs_stat(void* ctx, const char * path, struct stat * st); static int vfs_spiffs_unlink(void* ctx, const char *path); @@ -426,6 +427,7 @@ esp_err_t esp_vfs_spiffs_register(const esp_vfs_spiffs_conf_t * conf) .open_p = &vfs_spiffs_open, .close_p = &vfs_spiffs_close, .fstat_p = &vfs_spiffs_fstat, + .fsync_p = &vfs_spiffs_fsync, #ifdef CONFIG_VFS_SUPPORT_DIR .stat_p = &vfs_spiffs_stat, .link_p = &vfs_spiffs_link, @@ -617,6 +619,18 @@ static int vfs_spiffs_fstat(void* ctx, int fd, struct stat * st) return res; } +static int vfs_spiffs_fsync(void* ctx, int fd) +{ + esp_spiffs_t * efs = (esp_spiffs_t *)ctx; + int res = SPIFFS_fflush(efs->fs, fd); + if (res < 0) { + errno = spiffs_res_to_errno(SPIFFS_errno(efs->fs)); + SPIFFS_clearerr(efs->fs); + return -1; + } + return res; +} + #ifdef CONFIG_VFS_SUPPORT_DIR static int vfs_spiffs_stat(void* ctx, const char * path, struct stat * st)