From e955b9f65d64b6a8852e321513283020911a3eb3 Mon Sep 17 00:00:00 2001 From: ondrap Date: Mon, 31 Jan 2022 13:37:33 +0100 Subject: [PATCH] Fix lfs_file_seek doesn't update cache properties correctly in readonly mode. Invalidate cache to fix it. --- lfs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lfs.c b/lfs.c index d976389..351a126 100644 --- a/lfs.c +++ b/lfs.c @@ -2730,14 +2730,18 @@ static int lfs_file_outline(lfs_t *lfs, lfs_file_t *file) { } #endif -#ifndef LFS_READONLY -static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) { +static void lfs_file_invalidate_reading_flag(lfs_t *lfs, lfs_file_t *file) { if (file->flags & LFS_F_READING) { if (!(file->flags & LFS_F_INLINE)) { lfs_cache_drop(lfs, &file->cache); } file->flags &= ~LFS_F_READING; } +} + +#ifndef LFS_READONLY +static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) { + lfs_file_invalidate_reading_flag(lfs, file); if (file->flags & LFS_F_WRITING) { lfs_off_t pos = file->pos; @@ -3087,6 +3091,10 @@ static lfs_soff_t lfs_file_rawseek(lfs_t *lfs, lfs_file_t *file, if (err) { return err; } +#else + // Seek doesn't update cache parameters properly. + // It has to be invalidated otherwise next read will return incorrect values. + lfs_file_invalidate_reading_flag(lfs,file); #endif // update pos