From 89a79b03cfcdd07a11b799fd4612e57d35d659f7 Mon Sep 17 00:00:00 2001 From: SPRESENSE <41312067+SPRESENSE@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:41:40 +0900 Subject: [PATCH] fs/smartfs: Fix file size corruption when opening with overwriting mode If a existing file is opened with overwriting mode e.g. fopen(file, "w+"), the file size will be incorrect after writing any data to the file. This bug is caused by previous commit 10903b5, and its changes should be limited to only O_APPEND mode. --- fs/smartfs/smartfs_smart.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/smartfs/smartfs_smart.c b/fs/smartfs/smartfs_smart.c index 60c591babb..dca3b8b9d5 100644 --- a/fs/smartfs/smartfs_smart.c +++ b/fs/smartfs/smartfs_smart.c @@ -331,10 +331,11 @@ static int smartfs_open(FAR struct file *filep, const char *relpath, /* When using sector buffering, current sector with its header should * always be present in sf->buffer. Otherwise data corruption may arise - * when writing. + * when writing. However, this does not apply when overwriting without + * append mode. */ - if (sf->currsector != SMARTFS_ERASEDSTATE_16BIT) + if ((sf->currsector != SMARTFS_ERASEDSTATE_16BIT) && (oflags & O_APPEND)) { readwrite.logsector = sf->currsector; readwrite.offset = 0;