summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibPartition/MBRPartitionTable.h
diff options
context:
space:
mode:
authorSamuel Bowman <sam@sambowman.tech>2022-03-01 19:42:06 -0500
committerLinus Groh <mail@linusgroh.de>2022-07-21 20:13:44 +0100
commit1a6ef03e4a360d9497ef0babbb38c7c7cb1df0e0 (patch)
tree006b28bac47763166cc67be3d636bae5ea68879f /Userland/Libraries/LibPartition/MBRPartitionTable.h
parent940dde99473ec756cc78dc3ef9cea6fb1d651b6c (diff)
downloadserenity-1a6ef03e4a360d9497ef0babbb38c7c7cb1df0e0.zip
Kernel+LibPartition: Move MBRPartitionTable into LibPartition
Diffstat (limited to 'Userland/Libraries/LibPartition/MBRPartitionTable.h')
-rw-r--r--Userland/Libraries/LibPartition/MBRPartitionTable.h63
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;
+};
+
+}