/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Kernel { class SysFSDeviceIdentifiersDirectory; class SysFSSymbolicLinkDeviceComponent final : public SysFSSymbolicLink , public LockWeakable { friend class SysFSComponentRegistry; public: static ErrorOr> try_create(SysFSCharacterDevicesDirectory const& parent_directory, Device const& device, SysFSComponent const& pointed_component); static ErrorOr> try_create(SysFSBlockDevicesDirectory const& parent_directory, Device const& device, SysFSComponent const& pointed_component); virtual StringView name() const override { return m_major_minor_formatted_device_name->view(); } bool is_block_device() const { return m_block_device; } private: SysFSSymbolicLinkDeviceComponent(SysFSCharacterDevicesDirectory const& parent_directory, NonnullOwnPtr major_minor_formatted_device_name, Device const&, SysFSComponent const& pointed_component); SysFSSymbolicLinkDeviceComponent(SysFSBlockDevicesDirectory const& parent_directory, NonnullOwnPtr major_minor_formatted_device_name, Device const&, SysFSComponent const& pointed_component); IntrusiveListNode> m_list_node; bool const m_block_device { false }; NonnullOwnPtr m_major_minor_formatted_device_name; }; }