From 0d49586517332ecefe558a512cd72beae40a7131 Mon Sep 17 00:00:00 2001 From: Tennn11 <88527847+Tennn11@users.noreply.github.com> Date: Thu, 27 Jul 2023 15:53:15 +0800 Subject: [PATCH] [dfs v2]fix fcntl(F_SETFL) bug,and modify the error code when opening a file failed --- components/dfs/dfs_v2/src/dfs_file.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/components/dfs/dfs_v2/src/dfs_file.c b/components/dfs/dfs_v2/src/dfs_file.c index 9ed0a2b2c7b..52b1a63210e 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: