diff options
-rw-r--r-- | src/partition/repart.c | 15 | ||||
-rw-r--r-- | src/shared/fdisk-util.c | 18 | ||||
-rw-r--r-- | src/shared/fdisk-util.h | 1 | ||||
-rw-r--r-- | src/sysupdate/sysupdate-partition.c | 15 |
4 files changed, 25 insertions, 24 deletions
diff --git a/src/partition/repart.c b/src/partition/repart.c index 375df04ad7..95672f240d 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -2092,8 +2092,7 @@ static int context_load_partition_table( _cleanup_free_ char *label_copy = NULL; Partition *last = NULL; struct fdisk_partition *p; - struct fdisk_parttype *pt; - const char *pts, *label; + const char *label; uint64_t sz, start; bool found = false; sd_id128_t ptid, id; @@ -2111,17 +2110,9 @@ static int context_load_partition_table( fdisk_partition_has_partno(p) <= 0) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a position, size or number."); - pt = fdisk_partition_get_type(p); - if (!pt) - return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition: %m"); - - pts = fdisk_parttype_get_string(pt); - if (!pts) - return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition as string: %m"); - - r = sd_id128_from_string(pts, &ptid); + r = fdisk_partition_get_type_as_id128(p, &ptid); if (r < 0) - return log_error_errno(r, "Failed to parse partition type UUID %s: %m", pts); + return log_error_errno(r, "Failed to query partition type UUID: %m"); r = fdisk_partition_get_uuid_as_id128(p, &id); if (r < 0) diff --git a/src/shared/fdisk-util.c b/src/shared/fdisk-util.c index 9aba323043..eeed1840aa 100644 --- a/src/shared/fdisk-util.c +++ b/src/shared/fdisk-util.c @@ -39,4 +39,22 @@ int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret return sd_id128_from_string(ids, ret); } +int fdisk_partition_get_type_as_id128(struct fdisk_partition *p, sd_id128_t *ret) { + struct fdisk_parttype *pt; + const char *pts; + + assert(p); + assert(ret); + + pt = fdisk_partition_get_type(p); + if (!pt) + return -ENXIO; + + pts = fdisk_parttype_get_string(pt); + if (!pts) + return -ENXIO; + + return sd_id128_from_string(pts, ret); +} + #endif diff --git a/src/shared/fdisk-util.h b/src/shared/fdisk-util.h index 91c3ce46bd..7f34a042ec 100644 --- a/src/shared/fdisk-util.h +++ b/src/shared/fdisk-util.h @@ -17,5 +17,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); +int fdisk_partition_get_type_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 486f9f19dd..bd0486d99e 100644 --- a/src/sysupdate/sysupdate-partition.c +++ b/src/sysupdate/sysupdate-partition.c @@ -106,9 +106,8 @@ int read_partition_info( PartitionInfo *ret) { _cleanup_free_ char *label_copy = NULL, *device = NULL; - const char *pts, *label; + const char *label; struct fdisk_partition *p; - struct fdisk_parttype *pt; uint64_t start, size, flags; sd_id128_t ptid, id; GptPartitionType type; @@ -147,17 +146,9 @@ int read_partition_info( if (!label) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Found a partition without a label."); - pt = fdisk_partition_get_type(p); - if (!pt) - return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition: %m"); - - pts = fdisk_parttype_get_string(pt); - if (!pts) - return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire type of partition as string: %m"); - - r = sd_id128_from_string(pts, &ptid); + r = fdisk_partition_get_type_as_id128(p, &ptid); if (r < 0) - return log_error_errno(r, "Failed to parse partition type UUID %s: %m", pts); + return log_error_errno(r, "Failed to read partition type UUID: %m"); r = fdisk_partition_get_uuid_as_id128(p, &id); if (r < 0) |