From: Lennart Poettering Date: Tue, 29 Nov 2022 10:54:22 +0000 (+0100) Subject: fdisk-util: add fdisk_partition_get_uuid_as_id128() helper X-Git-Tag: v253-rc1~424^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02e32aa62958eb49d97540985f95bd79b2f59ccc;p=thirdparty%2Fsystemd.git fdisk-util: add fdisk_partition_get_uuid_as_id128() helper Inspired by: #25534 --- diff --git a/src/partition/repart.c b/src/partition/repart.c index 7857f7b3d19..375df04ad7f 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -2093,7 +2093,7 @@ static int context_load_partition_table( Partition *last = NULL; struct fdisk_partition *p; struct fdisk_parttype *pt; - const char *pts, *ids, *label; + const char *pts, *label; uint64_t sz, start; bool found = false; sd_id128_t ptid, id; @@ -2123,13 +2123,9 @@ static int context_load_partition_table( if (r < 0) return log_error_errno(r, "Failed to parse partition type UUID %s: %m", pts); - ids = fdisk_partition_get_uuid(p); - if (!ids) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a UUID."); - - r = sd_id128_from_string(ids, &id); + r = fdisk_partition_get_uuid_as_id128(p, &id); if (r < 0) - return log_error_errno(r, "Failed to parse partition UUID %s: %m", ids); + return log_error_errno(r, "Failed to query partition UUID: %m"); label = fdisk_partition_get_name(p); if (!isempty(label)) { diff --git a/src/shared/fdisk-util.c b/src/shared/fdisk-util.c index 1cdf09b18dc..9aba3230430 100644 --- a/src/shared/fdisk-util.c +++ b/src/shared/fdisk-util.c @@ -26,4 +26,17 @@ int fdisk_new_context_fd(int fd, bool read_only, struct fdisk_context **ret) { return 0; } +int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret) { + const char *ids; + + assert(p); + assert(ret); + + ids = fdisk_partition_get_uuid(p); + if (!ids) + return -ENXIO; + + return sd_id128_from_string(ids, ret); +} + #endif diff --git a/src/shared/fdisk-util.h b/src/shared/fdisk-util.h index 49cb840c330..91c3ce46bd3 100644 --- a/src/shared/fdisk-util.h +++ b/src/shared/fdisk-util.h @@ -5,6 +5,8 @@ #include +#include "sd-id128.h" + #include "macro.h" DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_context*, fdisk_unref_context, NULL); @@ -14,4 +16,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct fdisk_table*, fdisk_unref_table, NULL); int fdisk_new_context_fd(int fd, bool read_only, struct fdisk_context **ret); +int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret); + #endif diff --git a/src/sysupdate/sysupdate-partition.c b/src/sysupdate/sysupdate-partition.c index 33d0e584ba0..486f9f19ddc 100644 --- a/src/sysupdate/sysupdate-partition.c +++ b/src/sysupdate/sysupdate-partition.c @@ -106,7 +106,7 @@ int read_partition_info( PartitionInfo *ret) { _cleanup_free_ char *label_copy = NULL, *device = NULL; - const char *pts, *ids, *label; + const char *pts, *label; struct fdisk_partition *p; struct fdisk_parttype *pt; uint64_t start, size, flags; @@ -159,13 +159,9 @@ int read_partition_info( if (r < 0) return log_error_errno(r, "Failed to parse partition type UUID %s: %m", pts); - ids = fdisk_partition_get_uuid(p); - if (!ids) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a UUID."); - - r = sd_id128_from_string(ids, &id); + r = fdisk_partition_get_uuid_as_id128(p, &id); if (r < 0) - return log_error_errno(r, "Failed to parse partition UUID %s: %m", ids); + return log_error_errno(r, "Failed to read partition UUID: %m"); r = fdisk_partition_get_attrs_as_uint64(p, &flags); if (r < 0)