50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <inttypes.h>
|
|
#include <sys/types.h>
|
|
|
|
#include "sd-id128.h"
|
|
|
|
#include "fdisk-util.h"
|
|
#include "macro.h"
|
|
|
|
typedef struct PartitionInfo PartitionInfo;
|
|
|
|
typedef enum PartitionChange {
|
|
PARTITION_FLAGS = 1 << 0,
|
|
PARTITION_NO_AUTO = 1 << 1,
|
|
PARTITION_READ_ONLY = 1 << 2,
|
|
PARTITION_GROWFS = 1 << 3,
|
|
PARTITION_UUID = 1 << 4,
|
|
PARTITION_LABEL = 1 << 5,
|
|
_PARTITION_CHANGE_MAX = (1 << 6) - 1, /* all of the above */
|
|
_PARTITION_CHANGE_INVALID = -EINVAL,
|
|
} PartitionChange;
|
|
|
|
struct PartitionInfo {
|
|
size_t partno;
|
|
uint64_t start, size;
|
|
uint64_t flags;
|
|
sd_id128_t type, uuid;
|
|
char *label;
|
|
char *device; /* Note that this might point to some non-existing path in case we operate on a loopback file */
|
|
bool no_auto:1;
|
|
bool read_only:1;
|
|
bool growfs:1;
|
|
};
|
|
|
|
#define PARTITION_INFO_NULL \
|
|
{ \
|
|
.partno = SIZE_MAX, \
|
|
.start = UINT64_MAX, \
|
|
.size = UINT64_MAX, \
|
|
}
|
|
|
|
void partition_info_destroy(PartitionInfo *p);
|
|
|
|
int read_partition_info(struct fdisk_context *c, struct fdisk_table *t, size_t i, PartitionInfo *ret);
|
|
|
|
int find_suitable_partition(const char *device, uint64_t space, sd_id128_t *partition_type, PartitionInfo *ret);
|
|
int patch_partition(const char *device, const PartitionInfo *info, PartitionChange change);
|