From 984d20ec8cb734cb47fb1ff5d34861eaf9f4aa32 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 22 Jul 2026 12:23:56 +0200 Subject: kapi/fs: add file status and type types. --- kapi/kapi/filesystem.hpp | 2 ++ kapi/kapi/filesystem/file_status.hpp | 26 ++++++++++++++++++++ kapi/kapi/filesystem/file_type.hpp | 46 ++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 kapi/kapi/filesystem/file_status.hpp create mode 100644 kapi/kapi/filesystem/file_type.hpp (limited to 'kapi') diff --git a/kapi/kapi/filesystem.hpp b/kapi/kapi/filesystem.hpp index b64d251d..2b5dc827 100644 --- a/kapi/kapi/filesystem.hpp +++ b/kapi/kapi/filesystem.hpp @@ -2,6 +2,8 @@ #define TEACHOS_KAPI_FILESYSTEM_HPP #include // IWYU pragma: export +#include // IWYU pragma: export +#include // IWYU pragma: export #include #include diff --git a/kapi/kapi/filesystem/file_status.hpp b/kapi/kapi/filesystem/file_status.hpp new file mode 100644 index 00000000..df48f9db --- /dev/null +++ b/kapi/kapi/filesystem/file_status.hpp @@ -0,0 +1,26 @@ +#ifndef TEACH_KAPI_FILESYSTEM_FILE_STATUS_HPP +#define TEACH_KAPI_FILESYSTEM_FILE_STATUS_HPP + +// IWYU pragma: private, include + +#include + +#include + +#include + +namespace kapi::filesystem +{ + + struct file_status + { + std::uint32_t mode{}; + kstd::units::bytes size{}; + device_number raw_device{}; + std::uint64_t inode_number{}; + std::uint32_t link_count{}; + }; + +} // namespace kapi::filesystem + +#endif diff --git a/kapi/kapi/filesystem/file_type.hpp b/kapi/kapi/filesystem/file_type.hpp new file mode 100644 index 00000000..cb346b71 --- /dev/null +++ b/kapi/kapi/filesystem/file_type.hpp @@ -0,0 +1,46 @@ +#ifndef TEACH_KAPI_FILESYSTEM_FILE_TYPE_HPP +#define TEACH_KAPI_FILESYSTEM_FILE_TYPE_HPP + +// IWYU pragma: private, include + +#include + +namespace kapi::filesystem +{ + + enum struct file_type : std::uint32_t + { + fifo = 0x1000, + character_device = 0x2000, + directory = 0x4000, + block_device = 0x6000, + regular = 0x8000, + symbolic_link = 0xa000, + socket = 0xc000, + }; + + constexpr auto inline file_type_mask = std::uint32_t{0xf000}; + + [[nodiscard]] constexpr auto inline is_block_device(std::uint32_t mode) noexcept -> bool + { + return static_cast(mode & file_type_mask) == file_type::block_device; + } + + [[nodiscard]] constexpr auto inline is_character_device(std::uint32_t mode) noexcept -> bool + { + return static_cast(mode & file_type_mask) == file_type::character_device; + } + + [[nodiscard]] constexpr auto inline is_directory(std::uint32_t mode) noexcept -> bool + { + return static_cast(mode & file_type_mask) == file_type::directory; + } + + [[nodiscard]] constexpr auto inline is_regular(std::uint32_t mode) noexcept -> bool + { + return static_cast(mode & file_type_mask) == file_type::regular; + } + +} // namespace kapi::filesystem + +#endif -- cgit v1.2.3