From 569a0e42ec758aa63907be96f671cc84952da0f2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 15 Sep 2020 18:02:28 +0200 Subject: [PATCH] dissect: introduce PartitionDesignator as real type --- src/core/dbus-execute.c | 2 +- src/core/load-fragment.c | 4 ++-- src/dissect/dissect.c | 2 +- src/shared/dissect-image.c | 21 +++++++++------------ src/shared/dissect-image.h | 18 +++++++++--------- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 8f915ac2f5..445230d27c 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -1460,7 +1460,7 @@ static int read_mount_options(sd_bus_message *message, sd_bus_error *error, Moun while ((r = sd_bus_message_read(message, "(ss)", &partition, &mount_options)) > 0) { _cleanup_free_ char *previous = NULL, *escaped = NULL; _cleanup_free_ MountOptions *o = NULL; - int partition_designator; + PartitionDesignator partition_designator; if (chars_intersect(mount_options, WHITESPACE)) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index d3919adddf..3635ed03fe 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -1483,7 +1483,7 @@ int config_parse_root_image_options( MountOptions *o = NULL; _cleanup_free_ char *mount_options_resolved = NULL; const char *mount_options = NULL, *partition = "root"; - int partition_designator; + PartitionDesignator partition_designator; /* Format is either 'root:foo' or 'foo' (root is implied) */ if (!isempty(*second)) { @@ -4866,7 +4866,7 @@ int config_parse_mount_images( for (;;) { _cleanup_free_ char *partition = NULL, *mount_options = NULL, *mount_options_resolved = NULL; MountOptions *o = NULL; - int partition_designator; + PartitionDesignator partition_designator; r = extract_many_words(&q, ":", EXTRACT_CUNESCAPE|EXTRACT_UNESCAPE_SEPARATORS, &partition, &mount_options, NULL); if (r == -ENOMEM) diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c index dcebad8274..239bddc9c7 100644 --- a/src/dissect/dissect.c +++ b/src/dissect/dissect.c @@ -456,7 +456,7 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) { (void) table_set_empty_string(t, "-"); (void) table_set_align_percent(t, table_get_cell(t, 0, 7), 100); - for (unsigned i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { + for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { DissectedPartition *p = m->partitions + i; if (!p->found) diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 385b1247d7..28053130ef 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -325,7 +325,6 @@ int dissect_image( int r, generic_nr; struct stat st; sd_device *q; - unsigned i; assert(fd >= 0); assert(ret); @@ -504,7 +503,8 @@ int dissect_image( continue; if (is_gpt) { - int designator = _PARTITION_DESIGNATOR_INVALID, architecture = _ARCHITECTURE_INVALID; + PartitionDesignator designator = _PARTITION_DESIGNATOR_INVALID; + int architecture = _ARCHITECTURE_INVALID; const char *stype, *sid, *fstype = NULL; sd_id128_t type_id, id; bool rw = true; @@ -866,7 +866,7 @@ int dissect_image( b = NULL; /* Fill in file system types if we don't know them yet. */ - for (i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { + for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { DissectedPartition *p = m->partitions + i; if (!p->found) @@ -894,12 +894,10 @@ int dissect_image( } DissectedImage* dissected_image_unref(DissectedImage *m) { - unsigned i; - if (!m) return NULL; - for (i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { + for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { free(m->partitions[i].fstype); free(m->partitions[i].node); free(m->partitions[i].decrypted_fstype); @@ -1557,7 +1555,6 @@ int dissected_image_decrypt( #if HAVE_LIBCRYPTSETUP _cleanup_(decrypted_image_unrefp) DecryptedImage *d = NULL; - unsigned i; int r; #endif @@ -1585,7 +1582,7 @@ int dissected_image_decrypt( if (!d) return -ENOMEM; - for (i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { + for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) { DissectedPartition *p = m->partitions + i; int k; @@ -2039,14 +2036,14 @@ int dissect_image_and_warn( } } -bool dissected_image_can_do_verity(const DissectedImage *image, unsigned partition_designator) { +bool dissected_image_can_do_verity(const DissectedImage *image, PartitionDesignator partition_designator) { if (image->single_file_system) return partition_designator == PARTITION_ROOT && image->can_verity; return PARTITION_VERITY_OF(partition_designator) >= 0; } -bool dissected_image_has_verity(const DissectedImage *image, unsigned partition_designator) { +bool dissected_image_has_verity(const DissectedImage *image, PartitionDesignator partition_designator) { int k; if (image->single_file_system) @@ -2068,7 +2065,7 @@ MountOptions* mount_options_free_all(MountOptions *options) { return NULL; } -const char* mount_options_from_designator(const MountOptions *options, int designator) { +const char* mount_options_from_designator(const MountOptions *options, PartitionDesignator designator) { const MountOptions *m; LIST_FOREACH(mount_options, m, options) @@ -2164,4 +2161,4 @@ static const char *const partition_designator_table[] = { [PARTITION_VAR] = "var", }; -DEFINE_STRING_TABLE_LOOKUP(partition_designator, int); +DEFINE_STRING_TABLE_LOOKUP(partition_designator, PartitionDesignator); diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h index 9666488c27..520d8ab10e 100644 --- a/src/shared/dissect-image.h +++ b/src/shared/dissect-image.h @@ -27,7 +27,7 @@ struct DissectedPartition { char *mount_options; }; -enum { +typedef enum PartitionDesignator { PARTITION_ROOT, PARTITION_ROOT_SECONDARY, /* Secondary architecture */ PARTITION_HOME, @@ -41,9 +41,9 @@ enum { PARTITION_VAR, _PARTITION_DESIGNATOR_MAX, _PARTITION_DESIGNATOR_INVALID = -1 -}; +} PartitionDesignator; -static inline int PARTITION_VERITY_OF(int p) { +static inline PartitionDesignator PARTITION_VERITY_OF(PartitionDesignator p) { if (p == PARTITION_ROOT) return PARTITION_ROOT_VERITY; if (p == PARTITION_ROOT_SECONDARY) @@ -87,14 +87,14 @@ struct DissectedImage { }; struct MountOptions { - int partition_designator; + PartitionDesignator partition_designator; char *options; LIST_FIELDS(MountOptions, mount_options); }; MountOptions* mount_options_free_all(MountOptions *options); DEFINE_TRIVIAL_CLEANUP_FUNC(MountOptions*, mount_options_free_all); -const char* mount_options_from_designator(const MountOptions *options, int designator); +const char* mount_options_from_designator(const MountOptions *options, PartitionDesignator designator); int probe_filesystem(const char *node, char **ret_fstype); int dissect_image(int fd, const void *root_hash, size_t root_hash_size, const char *verity_data, const MountOptions *mount_options, DissectImageFlags flags, DissectedImage **ret); @@ -114,11 +114,11 @@ DecryptedImage* decrypted_image_unref(DecryptedImage *p); DEFINE_TRIVIAL_CLEANUP_FUNC(DecryptedImage*, decrypted_image_unref); int decrypted_image_relinquish(DecryptedImage *d); -const char* partition_designator_to_string(int i) _const_; -int partition_designator_from_string(const char *name) _pure_; +const char* partition_designator_to_string(PartitionDesignator d) _const_; +PartitionDesignator partition_designator_from_string(const char *name) _pure_; int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data, char **ret_roothashsig); -bool dissected_image_can_do_verity(const DissectedImage *image, unsigned partition_designator); -bool dissected_image_has_verity(const DissectedImage *image, unsigned partition_designator); +bool dissected_image_can_do_verity(const DissectedImage *image, PartitionDesignator d); +bool dissected_image_has_verity(const DissectedImage *image, PartitionDesignator d); int mount_image_privately_interactively(const char *path, DissectImageFlags flags, char **ret_directory, LoopDevice **ret_loop_device, DecryptedImage **ret_decrypted_image);