summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/partition/repart.c15
-rw-r--r--src/shared/fdisk-util.c18
-rw-r--r--src/shared/fdisk-util.h1
-rw-r--r--src/sysupdate/sysupdate-partition.c15
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)