gpt: Store the architecture in GptPartitionType
We also add a function gpt_partition_type_uuid_to_arch() to get the architecture of a partition type uuid.
This commit is contained in:
+39
-22
@@ -15,12 +15,12 @@
|
||||
#endif
|
||||
|
||||
#define _GPT_ARCH_SEXTET(arch, name) \
|
||||
{ GPT_ROOT_##arch, "root-" name }, \
|
||||
{ GPT_ROOT_##arch##_VERITY, "root-" name "-verity" }, \
|
||||
{ GPT_ROOT_##arch##_VERITY_SIG, "root-" name "-verity-sig" }, \
|
||||
{ GPT_USR_##arch, "usr-" name }, \
|
||||
{ GPT_USR_##arch##_VERITY, "usr-" name "-verity" }, \
|
||||
{ GPT_USR_##arch##_VERITY_SIG, "usr-" name "-verity-sig" }
|
||||
{ GPT_ROOT_##arch, "root-" name, ARCHITECTURE_##arch }, \
|
||||
{ GPT_ROOT_##arch##_VERITY, "root-" name "-verity", ARCHITECTURE_##arch }, \
|
||||
{ GPT_ROOT_##arch##_VERITY_SIG, "root-" name "-verity-sig", ARCHITECTURE_##arch }, \
|
||||
{ GPT_USR_##arch, "usr-" name, ARCHITECTURE_##arch }, \
|
||||
{ GPT_USR_##arch##_VERITY, "usr-" name "-verity", ARCHITECTURE_##arch }, \
|
||||
{ GPT_USR_##arch##_VERITY_SIG, "usr-" name "-verity-sig", ARCHITECTURE_##arch }
|
||||
|
||||
const GptPartitionType gpt_partition_type_table[] = {
|
||||
_GPT_ARCH_SEXTET(ALPHA, "alpha"),
|
||||
@@ -28,7 +28,16 @@ const GptPartitionType gpt_partition_type_table[] = {
|
||||
_GPT_ARCH_SEXTET(ARM, "arm"),
|
||||
_GPT_ARCH_SEXTET(ARM64, "arm64"),
|
||||
_GPT_ARCH_SEXTET(IA64, "ia64"),
|
||||
_GPT_ARCH_SEXTET(LOONGARCH64, "loongarch64"),
|
||||
|
||||
// TODO: Replace with `_GPT_ARCH_SEXTET(LOONGARCH64, "loongarch64")` once
|
||||
// https://github.com/systemd/systemd/pull/21288 is merged. */
|
||||
{ GPT_ROOT_LOONGARCH64, "root-loongarch64", _ARCHITECTURE_INVALID },
|
||||
{ GPT_ROOT_LOONGARCH64_VERITY, "root-loongarch64-verity", _ARCHITECTURE_INVALID },
|
||||
{ GPT_ROOT_LOONGARCH64_VERITY_SIG, "root-loongarch64-verity-sig", _ARCHITECTURE_INVALID },
|
||||
{ GPT_USR_LOONGARCH64, "usr-loongarch64", _ARCHITECTURE_INVALID },
|
||||
{ GPT_USR_LOONGARCH64_VERITY, "usr-loongarch64-verity", _ARCHITECTURE_INVALID },
|
||||
{ GPT_USR_LOONGARCH64_VERITY_SIG, "usr-loongarch64-verity-sig", _ARCHITECTURE_INVALID },
|
||||
|
||||
_GPT_ARCH_SEXTET(MIPS_LE, "mips-le"),
|
||||
_GPT_ARCH_SEXTET(MIPS64_LE, "mips64-le"),
|
||||
_GPT_ARCH_SEXTET(PPC, "ppc"),
|
||||
@@ -42,26 +51,26 @@ const GptPartitionType gpt_partition_type_table[] = {
|
||||
_GPT_ARCH_SEXTET(X86, "x86"),
|
||||
_GPT_ARCH_SEXTET(X86_64, "x86-64"),
|
||||
#ifdef GPT_ROOT_NATIVE
|
||||
{ GPT_ROOT_NATIVE, "root" },
|
||||
{ GPT_ROOT_NATIVE_VERITY, "root-verity" },
|
||||
{ GPT_ROOT_NATIVE_VERITY_SIG, "root-verity-sig" },
|
||||
{ GPT_USR_NATIVE, "usr" },
|
||||
{ GPT_USR_NATIVE_VERITY, "usr-verity" },
|
||||
{ GPT_USR_NATIVE_VERITY_SIG, "usr-verity-sig" },
|
||||
{ GPT_ROOT_NATIVE, "root", native_architecture() },
|
||||
{ GPT_ROOT_NATIVE_VERITY, "root-verity", native_architecture() },
|
||||
{ GPT_ROOT_NATIVE_VERITY_SIG, "root-verity-sig", native_architecture() },
|
||||
{ GPT_USR_NATIVE, "usr", native_architecture() },
|
||||
{ GPT_USR_NATIVE_VERITY, "usr-verity", native_architecture() },
|
||||
{ GPT_USR_NATIVE_VERITY_SIG, "usr-verity-sig", native_architecture() },
|
||||
#endif
|
||||
#ifdef GPT_ROOT_SECONDARY
|
||||
_GPT_ARCH_SEXTET(SECONDARY, "secondary"),
|
||||
#endif
|
||||
|
||||
{ GPT_ESP, "esp" },
|
||||
{ GPT_XBOOTLDR, "xbootldr" },
|
||||
{ GPT_SWAP, "swap" },
|
||||
{ GPT_HOME, "home" },
|
||||
{ GPT_SRV, "srv" },
|
||||
{ GPT_VAR, "var" },
|
||||
{ GPT_TMP, "tmp" },
|
||||
{ GPT_USER_HOME, "user-home" },
|
||||
{ GPT_LINUX_GENERIC, "linux-generic" },
|
||||
{ GPT_ESP, "esp", _ARCHITECTURE_INVALID },
|
||||
{ GPT_XBOOTLDR, "xbootldr", _ARCHITECTURE_INVALID },
|
||||
{ GPT_SWAP, "swap", _ARCHITECTURE_INVALID },
|
||||
{ GPT_HOME, "home", _ARCHITECTURE_INVALID },
|
||||
{ GPT_SRV, "srv", _ARCHITECTURE_INVALID },
|
||||
{ GPT_VAR, "var", _ARCHITECTURE_INVALID },
|
||||
{ GPT_TMP, "tmp", _ARCHITECTURE_INVALID },
|
||||
{ GPT_USER_HOME, "user-home", _ARCHITECTURE_INVALID },
|
||||
{ GPT_LINUX_GENERIC, "linux-generic", _ARCHITECTURE_INVALID },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -121,6 +130,14 @@ int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret) {
|
||||
return sd_id128_from_string(s, ret);
|
||||
}
|
||||
|
||||
Architecture gpt_partition_type_uuid_to_arch(sd_id128_t id) {
|
||||
for (size_t i = 0; i < ELEMENTSOF(gpt_partition_type_table) - 1; i++)
|
||||
if (sd_id128_equal(id, gpt_partition_type_table[i].uuid))
|
||||
return gpt_partition_type_table[i].arch;
|
||||
|
||||
return _ARCHITECTURE_INVALID;
|
||||
}
|
||||
|
||||
int gpt_partition_label_valid(const char *s) {
|
||||
_cleanup_free_ char16_t *recoded = NULL;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "sd-id128.h"
|
||||
|
||||
#include "architecture.h"
|
||||
#include "id128-util.h"
|
||||
|
||||
#define GPT_ROOT_ALPHA SD_ID128_MAKE(65,23,f8,ae,3e,b1,4e,2a,a0,5a,18,b6,95,ae,65,6f)
|
||||
@@ -288,9 +289,12 @@ const char *gpt_partition_type_uuid_to_string_harder(
|
||||
char buffer[static ID128_UUID_STRING_MAX]);
|
||||
int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret);
|
||||
|
||||
Architecture gpt_partition_type_uuid_to_arch(sd_id128_t id);
|
||||
|
||||
typedef struct GptPartitionType {
|
||||
sd_id128_t uuid;
|
||||
const char *name;
|
||||
Architecture arch;
|
||||
} GptPartitionType;
|
||||
|
||||
extern const GptPartitionType gpt_partition_type_table[];
|
||||
|
||||
@@ -47,6 +47,8 @@ static void test_gpt_types_against_architectures(void) {
|
||||
assert_se(gpt_partition_type_is_usr(id));
|
||||
if (streq(prefix, "usr-") && streq(suffix, "-verity"))
|
||||
assert_se(gpt_partition_type_is_usr_verity(id));
|
||||
|
||||
assert_se(gpt_partition_type_uuid_to_arch(id) == a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user