Directory.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/FileSystem/SysFS/RootDirectory.h>
  7. #include <Kernel/FileSystem/SysFS/Subsystems/Devices/Directory.h>
  8. #include <Kernel/FileSystem/SysFS/Subsystems/Devices/Storage/DeviceDirectory.h>
  9. #include <Kernel/FileSystem/SysFS/Subsystems/Devices/Storage/Directory.h>
  10. #include <Kernel/Sections.h>
  11. #include <Kernel/Storage/StorageDevice.h>
  12. namespace Kernel {
  13. static SysFSStorageDirectory* s_the { nullptr };
  14. UNMAP_AFTER_INIT NonnullRefPtr<SysFSStorageDirectory> SysFSStorageDirectory::must_create(SysFSDevicesDirectory const& parent_directory)
  15. {
  16. auto directory = adopt_ref(*new (nothrow) SysFSStorageDirectory(parent_directory));
  17. s_the = directory;
  18. return directory;
  19. }
  20. SysFSStorageDirectory& SysFSStorageDirectory::the()
  21. {
  22. VERIFY(s_the);
  23. return *s_the;
  24. }
  25. void SysFSStorageDirectory::plug(Badge<StorageDevice>, StorageDeviceSysFSDirectory& new_device_directory)
  26. {
  27. MUST(m_child_components.with([&](auto& list) -> ErrorOr<void> {
  28. list.append(new_device_directory);
  29. auto pointed_component_base_name = MUST(KString::try_create(new_device_directory.name()));
  30. auto pointed_component_relative_path = MUST(new_device_directory.relative_path(move(pointed_component_base_name), 0));
  31. return {};
  32. }));
  33. }
  34. void SysFSStorageDirectory::unplug(Badge<StorageDevice>, SysFSDirectory& removed_device_directory)
  35. {
  36. MUST(m_child_components.with([&](auto& list) -> ErrorOr<void> {
  37. list.remove(removed_device_directory);
  38. return {};
  39. }));
  40. }
  41. UNMAP_AFTER_INIT SysFSStorageDirectory::SysFSStorageDirectory(SysFSDevicesDirectory const& parent_directory)
  42. : SysFSDirectory(parent_directory)
  43. {
  44. }
  45. }