return 0;
}
+GptPartitionType gpt_partition_type_override_architecture(GptPartitionType type, Architecture arch) {
+ assert(arch >= 0);
+
+ FOREACH_ARRAY(t, gpt_partition_type_table, ELEMENTSOF(gpt_partition_type_table) - 1)
+ if (t->designator == type.designator && t->arch == arch)
+ return *t;
+
+ /* If we can't find an entry with the same designator and the requested architecture, just return the
+ * original partition type. */
+ return type;
+}
+
Architecture gpt_partition_type_uuid_to_arch(sd_id128_t id) {
const GptPartitionType *pt;
GptPartitionType gpt_partition_type_from_uuid(sd_id128_t id);
int gpt_partition_type_from_string(const char *s, GptPartitionType *ret);
+GptPartitionType gpt_partition_type_override_architecture(GptPartitionType type, Architecture arch);
+
const char *gpt_partition_type_mountpoint_nulstr(GptPartitionType type);
bool gpt_partition_type_knows_read_only(GptPartitionType type);
}
}
+TEST(override_architecture) {
+ GptPartitionType x, y;
+
+ assert_se(gpt_partition_type_from_string("root-x86-64", &x) >= 0);
+ assert_se(x.arch == ARCHITECTURE_X86_64);
+
+ assert_se(gpt_partition_type_from_string("root-arm64", &y) >= 0);
+ assert(y.arch == ARCHITECTURE_ARM64);
+
+ x = gpt_partition_type_override_architecture(x, ARCHITECTURE_ARM64);
+ assert_se(x.arch == y.arch);
+ assert_se(x.designator == y.designator);
+ assert_se(sd_id128_equal(x.uuid, y.uuid));
+ assert_se(streq(x.name, y.name));
+
+ /* If the partition type does not have an architecture, nothing should change. */
+
+ assert_se(gpt_partition_type_from_string("esp", &x) >= 0);
+ y = x;
+
+ x = gpt_partition_type_override_architecture(x, ARCHITECTURE_ARM64);
+ assert_se(x.arch == y.arch);
+ assert_se(x.designator == y.designator);
+ assert_se(sd_id128_equal(x.uuid, y.uuid));
+ assert_se(streq(x.name, y.name));
+}
+
DEFINE_TEST_MAIN(LOG_INFO);