diff options
author | Samuel Bowman <sam@sambowman.tech> | 2022-03-01 19:42:06 -0500 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-07-21 20:13:44 +0100 |
commit | 1a6ef03e4a360d9497ef0babbb38c7c7cb1df0e0 (patch) | |
tree | 006b28bac47763166cc67be3d636bae5ea68879f /Userland/Libraries/LibPartition/MBRPartitionTable.h | |
parent | 940dde99473ec756cc78dc3ef9cea6fb1d651b6c (diff) | |
download | serenity-1a6ef03e4a360d9497ef0babbb38c7c7cb1df0e0.zip |
Kernel+LibPartition: Move MBRPartitionTable into LibPartition
Diffstat (limited to 'Userland/Libraries/LibPartition/MBRPartitionTable.h')
-rw-r--r-- | Userland/Libraries/LibPartition/MBRPartitionTable.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Userland/Libraries/LibPartition/MBRPartitionTable.h b/Userland/Libraries/LibPartition/MBRPartitionTable.h new file mode 100644 index 0000000000..454d30117d --- /dev/null +++ b/Userland/Libraries/LibPartition/MBRPartitionTable.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020-2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/Error.h> +#include <LibPartition/PartitionTable.h> + +namespace Partition { + +class MBRPartitionTable : public PartitionTable { +public: + struct [[gnu::packed]] Entry { + u8 status; + u8 chs1[3]; + u8 type; + u8 chs2[3]; + u32 offset; + u32 length; + }; + struct [[gnu::packed]] Header { + u8 code1[218]; + u16 ts_zero; + u8 ts_drive; + u8 ts_seconds; + u8 ts_minutes; + u8 ts_hours; + u8 code2[216]; + u32 disk_signature; + u16 disk_signature_zero; + Entry entry[4]; + u16 mbr_signature; + }; + +public: + ~MBRPartitionTable(); + + static ErrorOr<NonnullOwnPtr<MBRPartitionTable>> try_to_initialize(Kernel::StorageDevice const&); + static OwnPtr<MBRPartitionTable> try_to_initialize(Kernel::StorageDevice const&, u32 start_lba); + explicit MBRPartitionTable(Kernel::StorageDevice const&); + MBRPartitionTable(Kernel::StorageDevice const&, u32 start_lba); + + bool is_protective_mbr() const; + bool contains_ebr() const; + virtual bool is_valid() const override { return m_valid; }; + +protected: + Header const& header() const; + bool is_header_valid() const { return m_header_valid; }; + +private: + bool read_boot_record(); + bool initialize(); + bool m_valid { false }; + bool m_header_valid { false }; + const u32 m_start_lba; + ByteBuffer m_cached_header; +}; + +} |