summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTennn11 <[email protected]>2023-07-27 17:23:39 +0800
committerGitHub <[email protected]>2023-07-27 17:23:39 +0800
commitfb1faa07461ed51a3f09fcaca063bf58a2d3d4b3 (patch)
tree7e5706b9ef9f1228006fbbc1370b21133c119dbe
parentdb24f1865ad14e484fe1175dea20461ac35713ce (diff)
[dfs v2]fix fcntl(F_SETFL) bug,and modify the error code when opening… (#7878)
-rw-r--r--components/dfs/dfs_v2/src/dfs_file.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/components/dfs/dfs_v2/src/dfs_file.c b/components/dfs/dfs_v2/src/dfs_file.c
index 9ed0a2b2c7..52b1a63210 100644
--- a/components/dfs/dfs_v2/src/dfs_file.c
+++ b/components/dfs/dfs_v2/src/dfs_file.c
@@ -502,6 +502,7 @@ int dfs_file_open(struct dfs_file *file, const char *path, int oflags, mode_t mo
else
{
LOG_I("lookup file:%s failed in file system", path);
+ ret = -ENOENT;
}
}
@@ -907,8 +908,25 @@ int dfs_file_fcntl(int fd, int cmd, unsigned long arg)
ret = file->flags;
break;
case F_SETFL:
- file->flags = arg;
+ {
+ int flags = (int)(rt_base_t)arg;
+ int mask =
+#ifdef O_ASYNC
+ O_ASYNC |
+#endif
+#ifdef O_DIRECT
+ O_DIRECT |
+#endif
+#ifdef O_NOATIME
+ O_NOATIME |
+#endif
+ O_APPEND | O_NONBLOCK;
+
+ flags &= mask;
+ file->flags &= ~mask;
+ file->flags |= flags;
break;
+ }
case F_GETLK:
break;
case F_SETLK: