From be1c5c6b9f2d69074e076efdee4816dd22a2ad70 Mon Sep 17 00:00:00 2001 From: Samuel Bowman Date: Sat, 12 Feb 2022 14:21:28 -0500 Subject: [PATCH] Kernel+LibPartition: Move DiskPartitionMetadata into LibPartition This commit creates a new library LibPartition which will contain partition related code sharable between Kernel and Userland and includes DiskPartitionMetadata as the first shared class. --- Kernel/CMakeLists.txt | 6 +++++- Kernel/Storage/Partition/DiskPartition.cpp | 6 +++--- Kernel/Storage/Partition/DiskPartition.h | 10 +++++----- Kernel/Storage/Partition/PartitionTable.cpp | 2 +- Kernel/Storage/Partition/PartitionTable.h | 8 ++++---- Userland/Libraries/CMakeLists.txt | 1 + Userland/Libraries/LibPartition/CMakeLists.txt | 5 +++++ .../Libraries/LibPartition}/DiskPartitionMetadata.cpp | 5 ++--- .../Libraries/LibPartition}/DiskPartitionMetadata.h | 4 +--- 9 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 Userland/Libraries/LibPartition/CMakeLists.txt rename {Kernel/Storage/Partition => Userland/Libraries/LibPartition}/DiskPartitionMetadata.cpp (96%) rename {Kernel/Storage/Partition => Userland/Libraries/LibPartition}/DiskPartitionMetadata.h (94%) diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index a61aa1282d..9e3a6991da 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -104,7 +104,6 @@ set(KERNEL_SOURCES Storage/ATA/ATAPIDiscDevice.cpp Storage/ATA/ATAPort.cpp Storage/Partition/DiskPartition.cpp - Storage/Partition/DiskPartitionMetadata.cpp Storage/Partition/EBRPartitionTable.cpp Storage/Partition/GUIDPartitionTable.cpp Storage/Partition/MBRPartitionTable.cpp @@ -405,6 +404,10 @@ set(CRYPTO_SOURCES ../Userland/Libraries/LibCrypto/Hash/SHA2.cpp ) +set(PARTITION_SOURCES + ../Userland/Libraries/LibPartition/DiskPartitionMetadata.cpp +) + set(SOURCES ${AK_SOURCES} ) @@ -416,6 +419,7 @@ if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") ${ELF_SOURCES} ${VT_SOURCES} ${CRYPTO_SOURCES} + ${PARTITION_SOURCES} ) else() set(RPI_SOURCES diff --git a/Kernel/Storage/Partition/DiskPartition.cpp b/Kernel/Storage/Partition/DiskPartition.cpp index 4bf2a5eca1..185f4f52f3 100644 --- a/Kernel/Storage/Partition/DiskPartition.cpp +++ b/Kernel/Storage/Partition/DiskPartition.cpp @@ -11,7 +11,7 @@ namespace Kernel { -NonnullRefPtr DiskPartition::create(BlockDevice& device, unsigned minor_number, DiskPartitionMetadata metadata) +NonnullRefPtr DiskPartition::create(BlockDevice& device, unsigned minor_number, Partition::DiskPartitionMetadata metadata) { auto partition_or_error = DeviceManagement::try_create_device(device, minor_number, metadata); // FIXME: Find a way to propagate errors @@ -19,7 +19,7 @@ NonnullRefPtr DiskPartition::create(BlockDevice& device, unsigned return partition_or_error.release_value(); } -DiskPartition::DiskPartition(BlockDevice& device, unsigned minor_number, DiskPartitionMetadata metadata) +DiskPartition::DiskPartition(BlockDevice& device, unsigned minor_number, Partition::DiskPartitionMetadata metadata) : BlockDevice(100, minor_number, device.block_size()) , m_device(device) , m_metadata(metadata) @@ -28,7 +28,7 @@ DiskPartition::DiskPartition(BlockDevice& device, unsigned minor_number, DiskPar DiskPartition::~DiskPartition() = default; -DiskPartitionMetadata const& DiskPartition::metadata() const +Partition::DiskPartitionMetadata const& DiskPartition::metadata() const { return m_metadata; } diff --git a/Kernel/Storage/Partition/DiskPartition.h b/Kernel/Storage/Partition/DiskPartition.h index a6a17797a9..f67d2cb32f 100644 --- a/Kernel/Storage/Partition/DiskPartition.h +++ b/Kernel/Storage/Partition/DiskPartition.h @@ -9,7 +9,7 @@ #include #include #include -#include +#include namespace Kernel { @@ -17,7 +17,7 @@ class DiskPartition final : public BlockDevice { friend class DeviceManagement; public: - static NonnullRefPtr create(BlockDevice&, unsigned, DiskPartitionMetadata); + static NonnullRefPtr create(BlockDevice&, unsigned, Partition::DiskPartitionMetadata); virtual ~DiskPartition(); virtual void start_request(AsyncBlockDeviceRequest&) override; @@ -28,14 +28,14 @@ public: virtual ErrorOr write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override; virtual bool can_write(OpenFileDescription const&, u64) const override; - DiskPartitionMetadata const& metadata() const; + Partition::DiskPartitionMetadata const& metadata() const; private: - DiskPartition(BlockDevice&, unsigned, DiskPartitionMetadata); + DiskPartition(BlockDevice&, unsigned, Partition::DiskPartitionMetadata); virtual StringView class_name() const override; WeakPtr m_device; - DiskPartitionMetadata m_metadata; + Partition::DiskPartitionMetadata m_metadata; }; } diff --git a/Kernel/Storage/Partition/PartitionTable.cpp b/Kernel/Storage/Partition/PartitionTable.cpp index 1731ef63b4..75fe0e56cf 100644 --- a/Kernel/Storage/Partition/PartitionTable.cpp +++ b/Kernel/Storage/Partition/PartitionTable.cpp @@ -12,7 +12,7 @@ PartitionTable::PartitionTable(StorageDevice const& device) { } -Optional PartitionTable::partition(unsigned index) +Optional PartitionTable::partition(unsigned index) { if (index > partitions_count()) return {}; diff --git a/Kernel/Storage/Partition/PartitionTable.h b/Kernel/Storage/Partition/PartitionTable.h index f9f4441f66..e21f5d61ff 100644 --- a/Kernel/Storage/Partition/PartitionTable.h +++ b/Kernel/Storage/Partition/PartitionTable.h @@ -9,25 +9,25 @@ #include #include #include -#include #include +#include namespace Kernel { class PartitionTable { public: - Optional partition(unsigned index); + Optional partition(unsigned index); size_t partitions_count() const { return m_partitions.size(); } virtual ~PartitionTable() = default; virtual bool is_valid() const = 0; - Vector partitions() const { return m_partitions; } + Vector partitions() const { return m_partitions; } protected: explicit PartitionTable(StorageDevice const&); NonnullRefPtr m_device; - Vector m_partitions; + Vector m_partitions; }; } diff --git a/Userland/Libraries/CMakeLists.txt b/Userland/Libraries/CMakeLists.txt index f19cd94dbc..a7ff04b791 100644 --- a/Userland/Libraries/CMakeLists.txt +++ b/Userland/Libraries/CMakeLists.txt @@ -36,6 +36,7 @@ add_subdirectory(LibLine) add_subdirectory(LibM) add_subdirectory(LibMain) add_subdirectory(LibMarkdown) +add_subdirectory(LibPartition) add_subdirectory(LibPCIDB) add_subdirectory(LibPDF) add_subdirectory(LibProtocol) diff --git a/Userland/Libraries/LibPartition/CMakeLists.txt b/Userland/Libraries/LibPartition/CMakeLists.txt new file mode 100644 index 0000000000..83751ec44b --- /dev/null +++ b/Userland/Libraries/LibPartition/CMakeLists.txt @@ -0,0 +1,5 @@ +set(SOURCES + DiskPartitionMetadata.cpp +) + +serenity_lib(LibPartition partition) diff --git a/Kernel/Storage/Partition/DiskPartitionMetadata.cpp b/Userland/Libraries/LibPartition/DiskPartitionMetadata.cpp similarity index 96% rename from Kernel/Storage/Partition/DiskPartitionMetadata.cpp rename to Userland/Libraries/LibPartition/DiskPartitionMetadata.cpp index 903f713efd..0ce3eced3b 100644 --- a/Kernel/Storage/Partition/DiskPartitionMetadata.cpp +++ b/Userland/Libraries/LibPartition/DiskPartitionMetadata.cpp @@ -4,10 +4,9 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include -namespace Kernel { +namespace Partition { DiskPartitionMetadata::PartitionType::PartitionType(u8 partition_type) { diff --git a/Kernel/Storage/Partition/DiskPartitionMetadata.h b/Userland/Libraries/LibPartition/DiskPartitionMetadata.h similarity index 94% rename from Kernel/Storage/Partition/DiskPartitionMetadata.h rename to Userland/Libraries/LibPartition/DiskPartitionMetadata.h index 2511b127c0..252be047a7 100644 --- a/Kernel/Storage/Partition/DiskPartitionMetadata.h +++ b/Userland/Libraries/LibPartition/DiskPartitionMetadata.h @@ -6,11 +6,9 @@ #pragma once -#include #include -#include -namespace Kernel { +namespace Partition { class DiskPartitionMetadata { private: