Merge pull request #19365 from keszybz/sd_id128_equals
Add sd_id128_in_set()
This commit is contained in:
@@ -3115,9 +3115,8 @@ static int partition_acquire_uuid(Context *context, Partition *p, sd_id128_t *re
|
||||
if (p == q)
|
||||
continue;
|
||||
|
||||
if (sd_id128_equal(q->current_uuid, result.id) ||
|
||||
sd_id128_equal(q->new_uuid, result.id)) {
|
||||
log_warning("Partition UUID calculated from seed for partition %" PRIu64 " exists already, reverting to randomized UUID.", p->partno);
|
||||
if (sd_id128_in_set(result.id, q->current_uuid, q->new_uuid)) {
|
||||
log_warning("Partition UUID calculated from seed for partition %" PRIu64 " already used, reverting to randomized UUID.", p->partno);
|
||||
|
||||
r = sd_id128_randomize(&result.id);
|
||||
if (r < 0)
|
||||
|
||||
+37
-32
@@ -108,52 +108,57 @@ int gpt_partition_label_valid(const char *s) {
|
||||
}
|
||||
|
||||
bool gpt_partition_type_is_root(sd_id128_t id) {
|
||||
return sd_id128_equal(id, GPT_ROOT_X86) ||
|
||||
sd_id128_equal(id, GPT_ROOT_X86_64) ||
|
||||
sd_id128_equal(id, GPT_ROOT_ARM) ||
|
||||
sd_id128_equal(id, GPT_ROOT_ARM_64) ||
|
||||
sd_id128_equal(id, GPT_ROOT_IA64) ||
|
||||
sd_id128_equal(id, GPT_ROOT_RISCV32) ||
|
||||
sd_id128_equal(id, GPT_ROOT_RISCV64);
|
||||
return sd_id128_in_set(id,
|
||||
GPT_ROOT_X86,
|
||||
GPT_ROOT_X86_64,
|
||||
GPT_ROOT_ARM,
|
||||
GPT_ROOT_ARM_64,
|
||||
GPT_ROOT_IA64,
|
||||
GPT_ROOT_RISCV32,
|
||||
GPT_ROOT_RISCV64);
|
||||
}
|
||||
|
||||
bool gpt_partition_type_is_root_verity(sd_id128_t id) {
|
||||
return sd_id128_equal(id, GPT_ROOT_X86_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_X86_64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_ARM_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_ARM_64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_IA64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_RISCV32_VERITY) ||
|
||||
sd_id128_equal(id, GPT_ROOT_RISCV64_VERITY);
|
||||
return sd_id128_in_set(id,
|
||||
GPT_ROOT_X86_VERITY,
|
||||
GPT_ROOT_X86_64_VERITY,
|
||||
GPT_ROOT_ARM_VERITY,
|
||||
GPT_ROOT_ARM_64_VERITY,
|
||||
GPT_ROOT_IA64_VERITY,
|
||||
GPT_ROOT_RISCV32_VERITY,
|
||||
GPT_ROOT_RISCV64_VERITY);
|
||||
}
|
||||
|
||||
bool gpt_partition_type_is_usr(sd_id128_t id) {
|
||||
return sd_id128_equal(id, GPT_USR_X86) ||
|
||||
sd_id128_equal(id, GPT_USR_X86_64) ||
|
||||
sd_id128_equal(id, GPT_USR_ARM) ||
|
||||
sd_id128_equal(id, GPT_USR_ARM_64) ||
|
||||
sd_id128_equal(id, GPT_USR_IA64) ||
|
||||
sd_id128_equal(id, GPT_USR_RISCV32) ||
|
||||
sd_id128_equal(id, GPT_USR_RISCV64);
|
||||
return sd_id128_in_set(id,
|
||||
GPT_USR_X86,
|
||||
GPT_USR_X86_64,
|
||||
GPT_USR_ARM,
|
||||
GPT_USR_ARM_64,
|
||||
GPT_USR_IA64,
|
||||
GPT_USR_RISCV32,
|
||||
GPT_USR_RISCV64);
|
||||
}
|
||||
|
||||
bool gpt_partition_type_is_usr_verity(sd_id128_t id) {
|
||||
return sd_id128_equal(id, GPT_USR_X86_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_X86_64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_ARM_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_ARM_64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_IA64_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_RISCV32_VERITY) ||
|
||||
sd_id128_equal(id, GPT_USR_RISCV64_VERITY);
|
||||
return sd_id128_in_set(id,
|
||||
GPT_USR_X86_VERITY,
|
||||
GPT_USR_X86_64_VERITY,
|
||||
GPT_USR_ARM_VERITY,
|
||||
GPT_USR_ARM_64_VERITY,
|
||||
GPT_USR_IA64_VERITY,
|
||||
GPT_USR_RISCV32_VERITY,
|
||||
GPT_USR_RISCV64_VERITY);
|
||||
}
|
||||
|
||||
bool gpt_partition_type_knows_read_only(sd_id128_t id) {
|
||||
return gpt_partition_type_is_root(id) ||
|
||||
gpt_partition_type_is_usr(id) ||
|
||||
sd_id128_equal(id, GPT_HOME) ||
|
||||
sd_id128_equal(id, GPT_SRV) ||
|
||||
sd_id128_equal(id, GPT_VAR) ||
|
||||
sd_id128_equal(id, GPT_TMP) ||
|
||||
sd_id128_in_set(id,
|
||||
GPT_HOME,
|
||||
GPT_SRV,
|
||||
GPT_VAR,
|
||||
GPT_TMP) ||
|
||||
gpt_partition_type_is_root_verity(id) || /* pretty much implied, but let's set the bit to make things really clear */
|
||||
gpt_partition_type_is_usr_verity(id); /* ditto */
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
***/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "_sd-common.h"
|
||||
@@ -119,6 +120,32 @@ _sd_pure_ static __inline__ int sd_id128_is_allf(sd_id128_t a) {
|
||||
#define SD_ID128_NULL ((const sd_id128_t) { .qwords = { 0, 0 }})
|
||||
#define SD_ID128_ALLF ((const sd_id128_t) { .qwords = { UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF) }})
|
||||
|
||||
_sd_pure_ static __inline__ int sd_id128_in_setv(sd_id128_t a, va_list ap) {
|
||||
for (;;) {
|
||||
sd_id128_t b = va_arg(ap, sd_id128_t);
|
||||
|
||||
if (sd_id128_is_null(b))
|
||||
return 0;
|
||||
|
||||
if (sd_id128_equal(a, b))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
_sd_pure_ static __inline__ int sd_id128_in_set_sentinel(sd_id128_t a, ...) {
|
||||
va_list ap;
|
||||
int r;
|
||||
|
||||
va_start(ap, a);
|
||||
r = sd_id128_in_setv(a, ap);
|
||||
va_end(ap);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
#define sd_id128_in_set(a, ...) \
|
||||
sd_id128_in_set_sentinel(a, ##__VA_ARGS__, SD_ID128_NULL)
|
||||
|
||||
_SD_END_DECLARATIONS;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -31,6 +31,13 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
assert_se(sd_id128_from_string(t, &id2) == 0);
|
||||
assert_se(sd_id128_equal(id, id2));
|
||||
assert_se(sd_id128_in_set(id, id));
|
||||
assert_se(sd_id128_in_set(id, id2));
|
||||
assert_se(sd_id128_in_set(id, id2, id));
|
||||
assert_se(sd_id128_in_set(id, ID128_WALDI, id));
|
||||
assert_se(!sd_id128_in_set(id));
|
||||
assert_se(!sd_id128_in_set(id, ID128_WALDI));
|
||||
assert_se(!sd_id128_in_set(id, ID128_WALDI, ID128_WALDI));
|
||||
|
||||
if (sd_booted() > 0) {
|
||||
assert_se(sd_id128_get_machine(&id) == 0);
|
||||
|
||||
Reference in New Issue
Block a user