diff --git a/Userland/Libraries/LibPartition/CMakeLists.txt b/Userland/Libraries/LibPartition/CMakeLists.txt index 08682886dc..111d7c95c5 100644 --- a/Userland/Libraries/LibPartition/CMakeLists.txt +++ b/Userland/Libraries/LibPartition/CMakeLists.txt @@ -7,3 +7,4 @@ set(SOURCES ) serenity_lib(LibPartition partition) +target_link_libraries(LibPartition LibCore) diff --git a/Userland/Libraries/LibPartition/PartitionTable.cpp b/Userland/Libraries/LibPartition/PartitionTable.cpp index dc5685667d..b3e16ea2dc 100644 --- a/Userland/Libraries/LibPartition/PartitionTable.cpp +++ b/Userland/Libraries/LibPartition/PartitionTable.cpp @@ -6,14 +6,27 @@ #include +#ifndef KERNEL +# include +#endif + namespace Partition { +#ifdef KERNEL PartitionTable::PartitionTable(Kernel::StorageDevice const& device) : m_device(device) + , m_block_size(device.block_size()) { } +#else +PartitionTable::PartitionTable(NonnullRefPtr device_file) + : m_device_file(device_file) +{ + VERIFY(ioctl(m_device_file->leak_fd(), STORAGE_DEVICE_GET_BLOCK_SIZE, &m_block_size) >= 0); +} +#endif -Optional PartitionTable::partition(unsigned index) +Optional PartitionTable::partition(unsigned index) const { if (index > partitions_count()) return {}; diff --git a/Userland/Libraries/LibPartition/PartitionTable.h b/Userland/Libraries/LibPartition/PartitionTable.h index 2ca4db59a0..fcbccf9bf8 100644 --- a/Userland/Libraries/LibPartition/PartitionTable.h +++ b/Userland/Libraries/LibPartition/PartitionTable.h @@ -6,25 +6,37 @@ #pragma once -#include #include +#ifdef KERNEL +# include +#else +# include +#endif + namespace Partition { class PartitionTable { public: - Optional partition(unsigned index); + Optional partition(unsigned index) const; size_t partitions_count() const { return m_partitions.size(); } virtual ~PartitionTable() = default; virtual bool is_valid() const = 0; Vector partitions() const { return m_partitions; } + size_t block_size() const { return m_block_size; } protected: +#ifdef KERNEL explicit PartitionTable(Kernel::StorageDevice const&); - NonnullRefPtr m_device; +#else + explicit PartitionTable(NonnullRefPtr); + NonnullRefPtr m_device_file; +#endif + Vector m_partitions; + size_t m_block_size; }; }