Serenity Operating System
at master 98 lines 2.5 kB view raw
1/* 2 * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibPartition/DiskPartitionMetadata.h> 8 9namespace Partition { 10 11DiskPartitionMetadata::PartitionType::PartitionType(u8 partition_type) 12{ 13 m_partition_type[0] = partition_type; 14} 15DiskPartitionMetadata::PartitionType::PartitionType(Array<u8, 16> partition_type) 16 : m_partition_type_is_uuid(true) 17{ 18 m_partition_type.span().overwrite(0, partition_type.data(), partition_type.size()); 19} 20UUID DiskPartitionMetadata::PartitionType::to_uuid() const 21{ 22 VERIFY(is_uuid()); 23 return m_partition_type; 24} 25u8 DiskPartitionMetadata::PartitionType::to_byte_indicator() const 26{ 27 VERIFY(!is_uuid()); 28 return m_partition_type[0]; 29} 30bool DiskPartitionMetadata::PartitionType::is_uuid() const 31{ 32 return m_partition_type_is_uuid; 33} 34bool DiskPartitionMetadata::PartitionType::is_valid() const 35{ 36 return !all_of(m_partition_type, [](auto const octet) { return octet == 0; }); 37} 38 39DiskPartitionMetadata::DiskPartitionMetadata(u64 start_block, u64 end_block, u8 partition_type) 40 : m_start_block(start_block) 41 , m_end_block(end_block) 42 , m_type(partition_type) 43{ 44 VERIFY(m_type.is_valid()); 45} 46 47DiskPartitionMetadata::DiskPartitionMetadata(u64 start_block, u64 end_block, Array<u8, 16> partition_type) 48 : m_start_block(start_block) 49 , m_end_block(end_block) 50 , m_type(partition_type) 51{ 52 VERIFY(m_type.is_valid()); 53} 54 55DiskPartitionMetadata::DiskPartitionMetadata(u64 start_block, u64 end_block, Array<u8, 16> partition_type, UUID unique_guid, u64 special_attributes) 56 : m_start_block(start_block) 57 , m_end_block(end_block) 58 , m_type(partition_type) 59 , m_unique_guid(unique_guid) 60 , m_attributes(special_attributes) 61{ 62 VERIFY(m_type.is_valid()); 63 VERIFY(!m_unique_guid.is_zero()); 64} 65 66DiskPartitionMetadata DiskPartitionMetadata::offset(u64 blocks_count) const 67{ 68 return { blocks_count + m_start_block, blocks_count + m_end_block, m_type.m_partition_type }; 69} 70 71u64 DiskPartitionMetadata::start_block() const 72{ 73 return m_start_block; 74} 75 76u64 DiskPartitionMetadata::end_block() const 77{ 78 return m_end_block; 79} 80 81Optional<u64> DiskPartitionMetadata::special_attributes() const 82{ 83 if (m_attributes == 0) 84 return {}; 85 return m_attributes; 86} 87 88DiskPartitionMetadata::PartitionType const& DiskPartitionMetadata::type() const 89{ 90 return m_type; 91} 92 93const UUID& DiskPartitionMetadata::unique_guid() const 94{ 95 return m_unique_guid; 96} 97 98}