libstorage-ng
 
Loading...
Searching...
No Matches
FreeInfo.h
1/*
2 * Copyright (c) [2004-2010] Novell, Inc.
3 * Copyright (c) [2016-2025] SUSE LLC
4 *
5 * All Rights Reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of version 2 of the GNU General Public License as published
9 * by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, contact Novell, Inc.
18 *
19 * To contact Novell about this file by physical or electronic mail, you may
20 * find current contact information at www.novell.com.
21 */
22
23
24#ifndef STORAGE_FREE_INFO_H
25#define STORAGE_FREE_INFO_H
26
27
28#include <libxml/tree.h>
29#include <cstdint>
30#include <ostream>
31
32
33// TODO find better name for file and class
34
35
36namespace storage
37{
38
46 enum : uint32_t
47 {
48
59
67
74
81
89
96
103
110
119
126
133
140
147
154
161
168
175
182
187
194
195 };
196
197
198 class ResizeInfo
199 {
200 public:
201
202 ResizeInfo(bool resize_ok, uint32_t reasons, unsigned long long min_size, unsigned long long max_size);
203
204 ResizeInfo(bool resize_ok, uint32_t reasons);
205
212 void combine(ResizeInfo extra_resize_info);
213
214 void combine_min(unsigned long long extra_min_size);
215
216 void combine_max(unsigned long long extra_max_size);
217
218 void combine_block_size(unsigned long long extra_block_size);
219
226 void shift(unsigned long long offset);
227
228 bool resize_ok;
229
230 uint32_t reasons;
231
232 unsigned long long min_size;
233 unsigned long long max_size;
234
235 unsigned long long block_size;
236
237 friend std::ostream& operator<<(std::ostream& out, const ResizeInfo& resize_info);
238
239 public:
240
241 ResizeInfo(const xmlNode* node);
242
243 void save(xmlNode* node) const;
244
245 private:
246
247 void check();
248
249 };
250
251
262 enum : uint32_t
263 {
264
269 RMB_HARDWARE = 1 << 0,
270
276
282
283 };
284
285
286 class RemoveInfo
287 {
288 public:
289
290 RemoveInfo(bool remove_ok, uint32_t reasons);
291
292 bool remove_ok;
293
294 uint32_t reasons;
295
296 friend std::ostream& operator<<(std::ostream& out, const RemoveInfo& remove_info);
297
298 };
299
300
301 class ContentInfo
302 {
303 public:
304
305 ContentInfo(bool is_windows, bool is_efi, unsigned num_homes);
306 ContentInfo();
307
308 bool is_windows;
309 bool is_efi;
310 unsigned num_homes;
311
312 friend std::ostream& operator<<(std::ostream& out, const ContentInfo& content_info);
313
314 public:
315
316 ContentInfo(const xmlNode* node);
317
318 void save(xmlNode* node) const;
319
320 };
321
322
323 class SpaceInfo
324 {
325 public:
326
327 SpaceInfo(unsigned long long size, unsigned long long used);
328
329 unsigned long long size;
330 unsigned long long used;
331
332 std::string get_size_string() const;
333
334 friend std::ostream& operator<<(std::ostream& out, const SpaceInfo& space_info);
335
336 public:
337
338 SpaceInfo(const xmlNode* node);
339
340 void save(xmlNode* node) const;
341
342 };
343
344}
345
346
347#endif
void shift(unsigned long long offset)
min_size += offset max_size += offset
void combine(ResizeInfo extra_resize_info)
min_size = max(min_size, extra_resize_info.min_size) max_size = min(max_size, extra_resize_info....
The storage namespace.
Definition Actiongraph.h:40
@ RMB_ON_IMPLICIT_PARTITION_TABLE
Partition on an implicit partition table cannot be removed - at least not without creating a partitio...
Definition FreeInfo.h:281
@ RMB_RENUMBER_ACTIVE_PARTITIONS
Removing the partition would result in renumbering of partitions with active stuff on them.
Definition FreeInfo.h:275
@ RMB_HARDWARE
The device corresponds to hardware, e.g.
Definition FreeInfo.h:269
@ RB_MIN_SIZE_FOR_FILESYSTEM
The filesystem has already the minimal possible size.
Definition FreeInfo.h:95
@ RB_MIN_SIZE_FOR_PARTITION
The partition has already the minimal possible size.
Definition FreeInfo.h:125
@ RB_RESIZE_NOT_SUPPORTED_DUE_TO_SNAPSHOTS
Resize of LVM logical volume is not supported since it has snapshots.
Definition FreeInfo.h:193
@ RB_MIN_MAX_ERROR
Several limitations were combined, e.g.
Definition FreeInfo.h:66
@ RB_EXTENDED_PARTITION
Extended partitions cannot be resized.
Definition FreeInfo.h:132
@ RB_MIN_SIZE_FOR_LVM_LV
The LVM logical volume has already the minimal possible size.
Definition FreeInfo.h:167
@ RB_SHRINK_NOT_SUPPORTED_FOR_LVM_LV_TYPE
Shrink of LVM logical volume of this type not supported, e.g.
Definition FreeInfo.h:146
@ RB_ON_IMPLICIT_PARTITION_TABLE
Partition on an implicit partition table cannot be resized.
Definition FreeInfo.h:139
@ RB_MAX_SIZE_FOR_LVM_LV_THIN
LVM thin logical volume has already maximal size.
Definition FreeInfo.h:174
@ RB_PASSWORD_REQUIRED
The encryption password is required.
Definition FreeInfo.h:186
@ RB_FILESYSTEM_INCONSISTENT
The filesystem seems to be inconsistent or checking filesystem consistency failed.
Definition FreeInfo.h:88
@ RB_MAX_SIZE_FOR_FILESYSTEM
The filesystem has already the maximal possible size.
Definition FreeInfo.h:102
@ RB_SHRINK_NOT_SUPPORTED_BY_FILESYSTEM
The filesystem does not support shrink.
Definition FreeInfo.h:73
@ RB_RESIZE_NOT_SUPPORTED_FOR_LVM_LV_TYPE
Resize of LVM logical volume of this type not supported, e.g.
Definition FreeInfo.h:153
@ RB_NO_SPACE_BEHIND_PARTITION
No space behind partition.
Definition FreeInfo.h:118
@ RB_NO_SPACE_IN_LVM_VG
No space left in LVM volume group.
Definition FreeInfo.h:160
@ RB_FILESYSTEM_FULL
The filesystem is full and cannot be shrunk.
Definition FreeInfo.h:109
@ RB_RESIZE_NOT_SUPPORTED_BY_DEVICE
The device or one of its descendants that also needs resizing does not support resizing.
Definition FreeInfo.h:58
@ RB_SHRINK_NOT_SUPPORTED_BY_MULTIDEVICE_FILESYSTEM
Multi-device filesystems (i.e., Btrfs) do not support shrink.
Definition FreeInfo.h:181
@ RB_GROW_NOT_SUPPORTED_BY_FILESYSTEM
The filesystem does not support grow.
Definition FreeInfo.h:80