/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2022-2023, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Kernel { struct ProcFSInodeData : public OpenFileDescriptionData { OwnPtr buffer; }; class ProcFSInode final : public Inode { friend class ProcFS; public: enum class Type { RootDirectory, SelfProcessLink, ProcessProperty, ProcessDirectory, ProcessSubdirectory, }; static InodeIndex create_index_from_global_directory_entry(segmented_global_inode_index entry); static InodeIndex create_index_from_process_directory_entry(ProcessID pid, segmented_process_directory_entry entry); virtual ~ProcFSInode() override; private: ProcFSInode(ProcFS const&, InodeIndex); ProcFS& procfs() { return static_cast(Inode::fs()); } ProcFS const& procfs() const { return static_cast(Inode::fs()); } // ^Inode (EROFS handling) virtual ErrorOr> create_child(StringView, mode_t, dev_t, UserID, GroupID) override { return EROFS; } virtual ErrorOr add_child(Inode&, StringView, mode_t) override { return EROFS; } virtual ErrorOr remove_child(StringView) override { return EROFS; } virtual ErrorOr replace_child(StringView, Inode&) override { return EROFS; } virtual ErrorOr chmod(mode_t) override { return EROFS; } virtual ErrorOr chown(UserID, GroupID) override { return EROFS; } virtual ErrorOr write_bytes_locked(off_t, size_t, UserOrKernelBuffer const&, OpenFileDescription*) override { return EROFS; } virtual ErrorOr truncate(u64) override { return EROFS; } // ^Inode (Silent ignore handling) virtual ErrorOr flush_metadata() override { return {}; } virtual ErrorOr update_timestamps(Optional