diff options
-rw-r--r-- | src/home/homework-luks.c | 16 | ||||
-rw-r--r-- | src/partition/repart.c | 9 | ||||
-rw-r--r-- | src/shared/blkid-util.h | 10 | ||||
-rw-r--r-- | src/shared/dissect-image.c | 16 | ||||
-rw-r--r-- | src/shared/find-esp.c | 10 |
5 files changed, 41 insertions, 20 deletions
diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index b562cb5e92..39ad56808d 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -148,10 +148,12 @@ static int probe_file_system_by_fd( errno = 0; r = blkid_do_safeprobe(b); - if (IN_SET(r, -2, 1)) /* nothing found or ambiguous result */ + if (r == _BLKID_SAFEPROBE_ERROR) + return errno_or_else(EIO); + if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND)) return -ENOPKG; - if (r != 0) - return errno > 0 ? -errno : -EIO; + + assert(r == _BLKID_SAFEPROBE_FOUND); (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); if (!fstype) @@ -665,10 +667,12 @@ static int luks_validate( errno = 0; r = blkid_do_safeprobe(b); - if (IN_SET(r, -2, 1)) /* nothing found or ambiguous result */ + if (r == _BLKID_SAFEPROBE_ERROR) + return errno_or_else(EIO); + if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND)) return -ENOPKG; - if (r != 0) - return errno > 0 ? -errno : -EIO; + + assert(r == _BLKID_SAFEPROBE_FOUND); (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); if (streq_ptr(fstype, "crypto_LUKS")) { diff --git a/src/partition/repart.c b/src/partition/repart.c index ce65ead62a..46b68c730c 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -4840,12 +4840,14 @@ static int resolve_copy_blocks_auto_candidate( errno = 0; r = blkid_do_safeprobe(b); - if (IN_SET(r, -2, 1)) { /* nothing found or ambiguous result */ + if (r == _BLKID_SAFEPROBE_ERROR) + return log_error_errno(errno_or_else(EIO), "Unable to probe for partition table of '%s': %m", p); + if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND)) { log_debug("Didn't find partition table on block device '%s'.", p); return false; } - if (r != 0) - return log_error_errno(errno_or_else(EIO), "Unable to probe for partition table of '%s': %m", p); + + assert(r == _BLKID_SAFEPROBE_FOUND); (void) blkid_probe_lookup_value(b, "PTTYPE", &pttype, NULL); if (!streq_ptr(pttype, "gpt")) { @@ -4857,7 +4859,6 @@ static int resolve_copy_blocks_auto_candidate( pl = blkid_probe_get_partitions(b); if (!pl) return log_error_errno(errno_or_else(EIO), "Unable read partition table of '%s': %m", p); - errno = 0; pp = blkid_partlist_devno_to_partition(pl, partition_devno); if (!pp) { diff --git a/src/shared/blkid-util.h b/src/shared/blkid-util.h index d4e78627b8..abc4b6166d 100644 --- a/src/shared/blkid-util.h +++ b/src/shared/blkid-util.h @@ -34,4 +34,14 @@ static inline int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t * return sd_id128_from_string(s, ret); } + +/* Define symbolic names for blkid_do_safeprobe() return values, since blkid only uses literal numbers. We + * prefix these symbolic definitions with underscores, to not invade libblkid's namespace needlessly. */ +enum { + _BLKID_SAFEPROBE_FOUND = 0, + _BLKID_SAFEPROBE_NOT_FOUND = 1, + _BLKID_SAFEPROBE_AMBIGUOUS = -2, + _BLKID_SAFEPROBE_ERROR = -1, +}; + #endif diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 9ce9775049..cf7fae76d1 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -119,14 +119,16 @@ int probe_filesystem_full(int fd, const char *path, char **ret_fstype) { errno = 0; r = blkid_do_safeprobe(b); - if (r == 1) + if (r == _BLKID_SAFEPROBE_NOT_FOUND) goto not_found; - if (r == -2) + if (r == _BLKID_SAFEPROBE_AMBIGUOUS) return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN), "Results ambiguous for partition %s", path); - if (r != 0) + if (r == _BLKID_SAFEPROBE_ERROR) return log_debug_errno(errno_or_else(EIO), "Failed to probe partition %s: %m", path); + assert(r == _BLKID_SAFEPROBE_FOUND); + (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); if (fstype) { @@ -439,10 +441,12 @@ static int dissect_image( errno = 0; r = blkid_do_safeprobe(b); - if (IN_SET(r, -2, 1)) - return log_debug_errno(SYNTHETIC_ERRNO(ENOPKG), "Failed to identify any partition table."); - if (r != 0) + if (r == _BLKID_SAFEPROBE_ERROR) return errno_or_else(EIO); + if (IN_SET(r, _BLKID_SAFEPROBE_AMBIGUOUS, _BLKID_SAFEPROBE_NOT_FOUND)) + return log_debug_errno(SYNTHETIC_ERRNO(ENOPKG), "Failed to identify any partition table."); + + assert(r == _BLKID_SAFEPROBE_FOUND); if ((!(flags & DISSECT_IMAGE_GPT_ONLY) && (flags & DISSECT_IMAGE_GENERIC_ROOT)) || diff --git a/src/shared/find-esp.c b/src/shared/find-esp.c index 80d27b5736..e019b81620 100644 --- a/src/shared/find-esp.c +++ b/src/shared/find-esp.c @@ -571,12 +571,14 @@ static int verify_xbootldr_blkid( errno = 0; r = blkid_do_safeprobe(b); - if (r == -2) + if (r == _BLKID_SAFEPROBE_AMBIGUOUS) return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "%s: File system is ambiguous.", node); - else if (r == 1) + if (r == _BLKID_SAFEPROBE_NOT_FOUND) return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "%s: File system does not contain a label.", node); - else if (r != 0) - return log_error_errno(errno ?: SYNTHETIC_ERRNO(EIO), "%s: Failed to probe file system: %m", node); + if (r == _BLKID_SAFEPROBE_ERROR) + return log_error_errno(errno_or_else(EIO), "%s: Failed to probe file system: %m", node); + + assert(r == _BLKID_SAFEPROBE_FOUND); r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &type, NULL); if (r != 0) |