libstorage-ng
Loading...
Searching...
No Matches
PartitionTable.h
1/*
2 * Copyright (c) [2015-2023] SUSE LLC
3 *
4 * All Rights Reserved.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License as published
8 * by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, contact Novell, Inc.
17 *
18 * To contact Novell about this file by physical or electronic mail, you may
19 * find current contact information at www.novell.com.
20 */
21
22
23#ifndef STORAGE_PARTITION_TABLE_H
24#define STORAGE_PARTITION_TABLE_H
25
26
27#include <vector>
28
29#include "storage/Utils/Swig.h"
30#include "storage/Utils/Region.h"
31#include "storage/Utils/Alignment.h"
32#include "storage/Devices/Device.h"
33#include "storage/Devices/Partition.h"
34
35
36namespace storage
37{
38 class Partitionable;
39
40
42 enum class PtType {
43 UNKNOWN, LOOP, MSDOS, GPT, DASD, MAC, IMPLICIT, AIX, SUN, ATARI, BSD, AMIGA, DVH
44 };
45
46
52 std::string get_pt_type_name(PtType pt_type);
53
54
59 {
60 public:
61
63
64 Region region;
65
66 unsigned int number;
67 unsigned nr() const ST_DEPRECATED { return number; }
68
69 std::string name;
70
71 bool primary_slot;
72 bool primary_possible;
73 bool extended_slot;
74 bool extended_possible;
75 bool logical_slot;
76 bool logical_possible;
77
78 bool is_possible(PartitionType partition_type) const;
79
80 friend std::ostream& operator<<(std::ostream& s, const PartitionSlot& partition_slot);
81
82 };
83
84
85 // abstract class
86
87 class PartitionTable : public Device
88 {
89 public:
90
97
103 Partition* create_partition(const std::string& name, const Region& region, PartitionType type);
104
109 void delete_partition(Partition* partition);
110
111 void delete_partition(const std::string& name) ST_DEPRECATED;
112
121 unsigned int max_primary() const;
122
128 bool extended_possible() const;
129
138 unsigned int max_logical() const;
139
140 unsigned int num_primary() const;
141 bool has_extended() const;
142 unsigned int num_logical() const;
143
148 std::vector<Partition*> get_partitions();
149
153 std::vector<const Partition*> get_partitions() const;
154
158 Partition* get_partition(const std::string& name);
159
166 const Partition* get_extended() const;
167
174
179
180 Alignment get_alignment(AlignType align_type = AlignType::OPTIMAL) const;
181
186 AlignType align_type = AlignType::OPTIMAL) const;
187
194 AlignType align_type = AlignType::OPTIMAL) const;
195
201
207
217
228 bool is_partition_id_supported(unsigned int id) const;
229
230 public:
231
232 class Impl;
233
234 Impl& get_impl();
235 const Impl& get_impl() const;
236
237 protected:
238
239 PartitionTable(Impl* impl);
240
241 };
242
243
249 bool is_partition_table(const Device* device);
250
258
263
264}
265
266#endif
A class to calculate partition alignment based on hardware topology.
Definition: Alignment.h:92
An abstract base class for storage devices.
Definition: Device.h:82
Number and name are only valid if one of the possible flags is true.
Definition: PartitionTable.h:59
Definition: PartitionTable.h:88
unsigned int max_logical() const
Highest number for a logical partition.
std::vector< const Partition * > get_partitions() const
Get the partitions of the partition table.
const Partition * get_extended() const
Returns the extended partition of the partition table.
std::vector< PartitionSlot > get_unused_partition_slots(AlignPolicy align_policy=AlignPolicy::ALIGN_START_KEEP_END, AlignType align_type=AlignType::OPTIMAL) const
std::vector< Partition * > get_partitions()
Get the partitions of the partition table.
bool extended_possible() const
Returns whether a extended partition is supported.
Region align(const Region &region, AlignPolicy align_policy=AlignPolicy::ALIGN_START_AND_END, AlignType align_type=AlignType::OPTIMAL) const
region is sector-based.
PtType get_type() const
Get the partition type.
const Partitionable * get_partitionable() const
Return the partitionable of the partition table.
Partition * get_partition(const std::string &name)
bool is_partition_no_automount_flag_supported() const
Returns whether the no-automount flag is supported on partitions on the partition table.
bool is_partition_id_supported(unsigned int id) const
Returns whether the partition id is supported on the partition table.
unsigned int max_primary() const
Highest number for a primary or extended partition.
Partitionable * get_partitionable()
Return the partitionable of the partition table.
Partition * create_partition(const std::string &name, const Region &region, PartitionType type)
region is sector-based.
bool is_partition_legacy_boot_flag_supported() const
Returns whether the legacy boot flag is supported on partitions on the partition table.
void delete_partition(Partition *partition)
Delete a partition in the partition table.
bool is_partition_boot_flag_supported() const
Returns whether the boot flag is supported on partitions on the partition table.
A partition of a Partitionable, e.g.
Definition: Partition.h:281
Definition: Partitionable.h:40
A start/length pair with a block size.
Definition: Region.h:85
The storage namespace.
Definition: Actiongraph.h:40
PtType
Partition Table Type.
Definition: PartitionTable.h:42
PartitionTable * to_partition_table(Device *device)
Converts pointer to Device to pointer to PartitionTable.
PartitionType
Enum with partition types.
Definition: Partition.h:43
AlignType
Definition: Alignment.h:37
@ OPTIMAL
Align to topology information.
bool is_partition_table(const Device *device)
Checks whether device points to a PartitionTable.
AlignPolicy
Definition: Alignment.h:51
@ ALIGN_START_AND_END
Align start and end.
@ ALIGN_START_KEEP_END
Align start and keep end.
std::string get_pt_type_name(PtType pt_type)
Convert the PtType pt_type to a string.