From: Daan De Meyer Date: Tue, 23 Nov 2021 16:52:27 +0000 (+0100) Subject: gpt: Store the architecture in GptPartitionType X-Git-Tag: v250-rc1~155^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51d1c8f2feef9eac7c242354a79559ccc2dff174;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/gpt.c b/src/shared/gpt.c index 87b893beed7..75324b0fe39 100644 --- a/src/shared/gpt.c +++ b/src/shared/gpt.c @@ -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; diff --git a/src/shared/gpt.h b/src/shared/gpt.h index fb9fb485460..9b335d02aa4 100644 --- a/src/shared/gpt.h +++ b/src/shared/gpt.h @@ -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[]; diff --git a/src/test/test-gpt.c b/src/test/test-gpt.c index 7ee044ba50c..6fa546de2ad 100644 --- a/src/test/test-gpt.c +++ b/src/test/test-gpt.c @@ -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); } } }