This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 32962778d103b8042579ac4fd67965d10b61bf00
Author: Xiang Xiao <[email protected]>
AuthorDate: Wed Nov 11 23:52:33 2026 +0800

    fs/userfs: keep f_pos in step with the daemon
    
    userfs_read(), userfs_write() and userfs_seek() forward the request to
    the daemon but never update filep->f_pos.  file_seek() returns
    filep->f_pos, so lseek(fd, 0, SEEK_CUR) keeps reporting the position
    of the open, and pread() and pwrite() restore that stale offset
    afterwards.
    
    Advance f_pos by the bytes read or written, and set it to the offset
    the daemon returns for a seek.
    
    Signed-off-by: Xiang Xiao <[email protected]>
    Signed-off-by: jingfei <[email protected]>
---
 fs/userfs/fs_userfs.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/fs/userfs/fs_userfs.c b/fs/userfs/fs_userfs.c
index 39ab75a7cb2..2a1248edb0e 100644
--- a/fs/userfs/fs_userfs.c
+++ b/fs/userfs/fs_userfs.c
@@ -469,6 +469,10 @@ static ssize_t userfs_read(FAR struct file *filep, char 
*buffer,
 
   memcpy(buffer, resp->rddata, resp->nread);
   nread = resp->nread;
+  if (nread > 0)
+    {
+      filep->f_pos += nread;
+    }
 
   nxmutex_unlock(&priv->lock);
 
@@ -561,6 +565,10 @@ static ssize_t userfs_write(FAR struct file *filep, FAR 
const char *buffer,
     }
 
   nwritten = resp->nwritten;
+  if (nwritten > 0)
+    {
+      filep->f_pos += nwritten;
+    }
 
   nxmutex_unlock(&priv->lock);
 
@@ -643,6 +651,10 @@ static off_t userfs_seek(FAR struct file *filep, off_t 
offset, int whence)
     }
 
   off_ret = resp->ret;
+  if (off_ret >= 0)
+    {
+      filep->f_pos = off_ret;
+    }
 
   nxmutex_unlock(&priv->lock);
 

Reply via email to