/* * Copyright (c) 2018-2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Kernel { class VirtualFileSystem; class Mount { AK_MAKE_NONCOPYABLE(Mount); AK_MAKE_NONMOVABLE(Mount); friend class VirtualFileSystem; public: Mount(NonnullRefPtr, RefPtr host_custody, int flags); Mount(NonnullRefPtr source, NonnullRefPtr host_custody, int flags); RefPtr host() const; RefPtr host(); Inode const& guest() const { return *m_guest; } Inode& guest() { return *m_guest; } FileSystem const& guest_fs() const { return *m_guest_fs; } FileSystem& guest_fs() { return *m_guest_fs; } ErrorOr> absolute_path() const; int flags() const { return m_flags; } void set_flags(int flags) { m_flags = flags; } private: NonnullRefPtr const m_guest_fs; NonnullRefPtr const m_guest; RefPtr const m_host_custody; int m_flags { 0 }; IntrusiveListNode m_vfs_list_node; }; }