From 35b40030a701fa950bb34005a10a8621b05dbcc5 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 27 Jan 2023 23:50:28 -0500 Subject: [PATCH] file_systems/fs_ops_support: Add open_mode_to_access. This is duplicated across multiple filesystems, and could probably be used in more still. Adjusted only BFS, EXT2, and NTFS in this commit, as they are the ones which make use of fs_ops_support.h already and thus need to be modified to avoid duplicate-definition errors. Also tweak next_dirent to support being built under fs_shell. (Possibly we should define ASSERT there, though?) --- headers/private/file_systems/fs_ops_support.h | 18 ++++++++++++++++++ src/add-ons/kernel/file_systems/bfs/Utility.h | 18 ++---------------- .../file_systems/bfs/kernel_interface.cpp | 2 -- .../kernel/file_systems/ext2/Utility.h | 19 +++---------------- .../file_systems/ext2/kernel_interface.cpp | 1 - .../file_systems/ntfs/kernel_interface.cpp | 13 ------------- 6 files changed, 23 insertions(+), 48 deletions(-) diff --git a/headers/private/file_systems/fs_ops_support.h b/headers/private/file_systems/fs_ops_support.h index f6b9743214..746b9336db 100644 --- a/headers/private/file_systems/fs_ops_support.h +++ b/headers/private/file_systems/fs_ops_support.h @@ -14,6 +14,22 @@ #endif +/*! Converts a given open mode (e.g. O_RDONLY) into access modes (e.g. R_OK). + */ +static inline int +open_mode_to_access(int openMode) +{ + openMode &= O_RWMASK; + if (openMode == O_RDONLY) + return R_OK; + if (openMode == O_WRONLY) + return W_OK; + if (openMode == O_RDWR) + return R_OK | W_OK; + return 0; +} + + /*! Computes and assigns `dirent->d_reclen`, adjusts `bufferRemaining` accordingly, * and either advances to the next buffer, or returns NULL if no space remains. */ @@ -21,7 +37,9 @@ static inline struct dirent* next_dirent(struct dirent* dirent, size_t nameLength, size_t& bufferRemaining) { const size_t reclen = offsetof(struct dirent, d_name) + nameLength + 1; +#ifdef ASSERT ASSERT(reclen <= bufferRemaining); +#endif dirent->d_reclen = reclen; const size_t roundedReclen = ROUNDUP(reclen, alignof(struct dirent)); diff --git a/src/add-ons/kernel/file_systems/bfs/Utility.h b/src/add-ons/kernel/file_systems/bfs/Utility.h index 9a06eed0b5..65ed9eb02b 100644 --- a/src/add-ons/kernel/file_systems/bfs/Utility.h +++ b/src/add-ons/kernel/file_systems/bfs/Utility.h @@ -8,6 +8,8 @@ #include "system_dependencies.h" +#include + #include "bfs.h" @@ -131,20 +133,4 @@ is_directory(int mode) } -/*! Converts the open mode, the open flags given to bfs_open(), into - access modes, e.g. since O_RDONLY requires read access to the - file, it will be converted to R_OK. -*/ -inline int -open_mode_to_access(int openMode) -{ - openMode &= O_RWMASK; - if (openMode == O_RDONLY) - return R_OK; - if (openMode == O_WRONLY) - return W_OK; - - return R_OK | W_OK; -} - #endif // UTILITY_H diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index fa2cc8e629..86a590e88e 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -19,8 +19,6 @@ #include "bfs_control.h" #include "bfs_disk_system.h" -#include - // TODO: temporary solution as long as there is no public I/O requests API #ifndef FS_SHELL # include diff --git a/src/add-ons/kernel/file_systems/ext2/Utility.h b/src/add-ons/kernel/file_systems/ext2/Utility.h index 4d947d4173..7fc335977e 100644 --- a/src/add-ons/kernel/file_systems/ext2/Utility.h +++ b/src/add-ons/kernel/file_systems/ext2/Utility.h @@ -7,6 +7,9 @@ #include "ext2.h" +#include + + enum inode_type { S_DIRECTORY = S_IFDIR, S_FILE = S_IFREG, @@ -20,20 +23,4 @@ enum inode_type { }; -/*! Converts the open mode, the open flags given to bfs_open(), into - access modes, e.g. since O_RDONLY requires read access to the - file, it will be converted to R_OK. -*/ -inline int -open_mode_to_access(int openMode) -{ - openMode &= O_RWMASK; - if (openMode == O_RDONLY) - return R_OK; - if (openMode == O_WRONLY) - return W_OK; - - return R_OK | W_OK; -} - #endif // UTILITY_H diff --git a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp index eaa8bd072c..ab868e4600 100644 --- a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include diff --git a/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp index 5b7214d0f1..7c911801c9 100644 --- a/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp @@ -713,19 +713,6 @@ fs_write_stat(fs_volume* _volume, fs_vnode* _node, const struct stat* stat, uint } -static inline int -open_mode_to_access(int openMode) -{ - if ((openMode & O_RWMASK) == O_RDONLY) - return R_OK; - if ((openMode & O_RWMASK) == O_WRONLY) - return W_OK; - if ((openMode & O_RWMASK) == O_RDWR) - return R_OK | W_OK; - return 0; -} - - static status_t fs_generic_create(fs_volume* _volume, vnode* directory, const char* name, int mode, ino_t* _inode)