Browse Source

[dfs v2]fix fcntl(F_SETFL) bug,and modify the error code when opening… (#7878)

Tennn11 1 year ago
parent
commit
fb1faa0746
1 changed files with 19 additions and 1 deletions
  1. 19 1
      components/dfs/dfs_v2/src/dfs_file.c

+ 19 - 1
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: