Serenity Operating System
1/*
2 * Copyright (c) 2020-2022, Liav A. <liavalb@hotmail.co.il>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <LibPartition/MBRPartitionTable.h>
10
11namespace Partition {
12
13struct GUIDPartitionHeader;
14class GUIDPartitionTable final : public MBRPartitionTable {
15public:
16 virtual ~GUIDPartitionTable() = default;
17
18#ifdef KERNEL
19 static ErrorOr<NonnullOwnPtr<GUIDPartitionTable>> try_to_initialize(Kernel::StorageDevice&);
20 explicit GUIDPartitionTable(Kernel::StorageDevice&);
21#else
22 static ErrorOr<NonnullOwnPtr<GUIDPartitionTable>> try_to_initialize(NonnullRefPtr<Core::DeprecatedFile>);
23 explicit GUIDPartitionTable(NonnullRefPtr<Core::DeprecatedFile>);
24#endif
25
26 virtual bool is_valid() const override
27 {
28 return m_valid;
29 }
30
31private:
32 bool is_unused_entry(Array<u8, 16>) const;
33 GUIDPartitionHeader const& header() const;
34 bool initialize();
35
36 bool m_valid { true };
37 ByteBuffer m_cached_header;
38};
39
40}