summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-11-29 11:54:22 +0100
committerLennart Poettering <lennart@poettering.net>2022-11-29 12:07:15 +0100
commit02e32aa62958eb49d97540985f95bd79b2f59ccc (patch)
tree0c415507c7c3a4b429723d126a97009c2951ecbf
parent0ccfd3564b2532a4da6526a9e030362c4a142b77 (diff)
downloadsystemd-02e32aa62958eb49d97540985f95bd79b2f59ccc.tar.gz
fdisk-util: add fdisk_partition_get_uuid_as_id128() helper
Inspired by: #25534
-rw-r--r--src/partition/repart.c10
-rw-r--r--src/shared/fdisk-util.c13
-rw-r--r--src/shared/fdisk-util.h4
-rw-r--r--src/sysupdate/sysupdate-partition.c10
4 files changed, 23 insertions, 14 deletions
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 7857f7b3d1..375df04ad7 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 1cdf09b18d..9aba323043 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 49cb840c33..91c3ce46bd 100644
--- a/src/shared/fdisk-util.h
+++ b/src/shared/fdisk-util.h
@@ -5,6 +5,8 @@
#include <libfdisk.h>
+#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 33d0e584ba..486f9f19dd 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)