/* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #include #include #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);