diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-01-22 17:10:50 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-01-22 20:54:51 +0100 |
commit | 5183c50add40a89c0f83c0006cc2b50581b1c306 (patch) | |
tree | bcf9c51aed2796f8b1229607cf8ba1a5042f27be /src/import | |
parent | 1f5a21324cec54aaee5427edd3bb876c08fc0bf7 (diff) | |
download | systemd-5183c50add40a89c0f83c0006cc2b50581b1c306.tar.gz |
import: introduce ImportFlags flags field
This merges the two flags that are passed to the ImportTar/ImportRaw
objects into a single flags parameter, which we then can extend more
easily later on.
No change in behaviour.
This is inspired by 133b34f69a72dc90d4e336837d699245390c9f50 which does
the same for PullTar/PullRaw.
Diffstat (limited to 'src/import')
-rw-r--r-- | src/import/import-common.h | 7 | ||||
-rw-r--r-- | src/import/import-raw.c | 14 | ||||
-rw-r--r-- | src/import/import-raw.h | 3 | ||||
-rw-r--r-- | src/import/import-tar.c | 14 | ||||
-rw-r--r-- | src/import/import-tar.h | 3 | ||||
-rw-r--r-- | src/import/import.c | 15 |
6 files changed, 32 insertions, 24 deletions
diff --git a/src/import/import-common.h b/src/import/import-common.h index b27a980839..d7e8fc485f 100644 --- a/src/import/import-common.h +++ b/src/import/import-common.h @@ -3,6 +3,13 @@ #include <sys/types.h> +typedef enum ImportFlags { + IMPORT_FORCE = 1 << 0, /* replace existing image */ + IMPORT_READ_ONLY = 1 << 1, /* make generated image read-only */ + + IMPORT_FLAGS_MASK = IMPORT_FORCE|IMPORT_READ_ONLY, +} ImportFlags; + int import_make_read_only_fd(int fd); int import_make_read_only(const char *path); diff --git a/src/import/import-raw.c b/src/import/import-raw.c index c0869ffcf9..f6ee86d625 100644 --- a/src/import/import-raw.c +++ b/src/import/import-raw.c @@ -34,8 +34,7 @@ struct RawImport { void *userdata; char *local; - bool force_local; - bool read_only; + ImportFlags flags; char *temp_path; char *final_path; @@ -213,13 +212,13 @@ static int raw_import_finish(RawImport *i) { (void) copy_xattr(i->input_fd, i->output_fd); } - if (i->read_only) { + if (i->flags & IMPORT_READ_ONLY) { r = import_make_read_only_fd(i->output_fd); if (r < 0) return r; } - if (i->force_local) + if (i->flags & IMPORT_FORCE) (void) rm_rf(i->final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME); r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path); @@ -386,12 +385,13 @@ static int raw_import_on_defer(sd_event_source *s, void *userdata) { return raw_import_process(i); } -int raw_import_start(RawImport *i, int fd, const char *local, bool force_local, bool read_only) { +int raw_import_start(RawImport *i, int fd, const char *local, ImportFlags flags) { int r; assert(i); assert(fd >= 0); assert(local); + assert(!(flags & ~IMPORT_FLAGS_MASK)); if (!hostname_is_valid(local, 0)) return -EINVAL; @@ -406,8 +406,8 @@ int raw_import_start(RawImport *i, int fd, const char *local, bool force_local, r = free_and_strdup(&i->local, local); if (r < 0) return r; - i->force_local = force_local; - i->read_only = read_only; + + i->flags = flags; if (fstat(fd, &i->st) < 0) return -errno; diff --git a/src/import/import-raw.h b/src/import/import-raw.h index 4612a9ffef..e99703c155 100644 --- a/src/import/import-raw.h +++ b/src/import/import-raw.h @@ -3,6 +3,7 @@ #include "sd-event.h" +#include "import-common.h" #include "import-util.h" #include "macro.h" @@ -15,4 +16,4 @@ RawImport* raw_import_unref(RawImport *import); DEFINE_TRIVIAL_CLEANUP_FUNC(RawImport*, raw_import_unref); -int raw_import_start(RawImport *i, int fd, const char *local, bool force_local, bool read_only); +int raw_import_start(RawImport *i, int fd, const char *local, ImportFlags flags); diff --git a/src/import/import-tar.c b/src/import/import-tar.c index d68ce91613..cc86bebb0e 100644 --- a/src/import/import-tar.c +++ b/src/import/import-tar.c @@ -36,8 +36,7 @@ struct TarImport { void *userdata; char *local; - bool force_local; - bool read_only; + ImportFlags flags; char *temp_path; char *final_path; @@ -183,13 +182,13 @@ static int tar_import_finish(TarImport *i) { if (r < 0) return r; - if (i->read_only) { + if (i->flags & IMPORT_READ_ONLY) { r = import_make_read_only(i->temp_path); if (r < 0) return r; } - if (i->force_local) + if (i->flags & IMPORT_FORCE) (void) rm_rf(i->final_path, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME); r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path); @@ -322,12 +321,13 @@ static int tar_import_on_defer(sd_event_source *s, void *userdata) { return tar_import_process(i); } -int tar_import_start(TarImport *i, int fd, const char *local, bool force_local, bool read_only) { +int tar_import_start(TarImport *i, int fd, const char *local, ImportFlags flags) { int r; assert(i); assert(fd >= 0); assert(local); + assert(!(flags & ~IMPORT_FLAGS_MASK)); if (!hostname_is_valid(local, 0)) return -EINVAL; @@ -342,8 +342,8 @@ int tar_import_start(TarImport *i, int fd, const char *local, bool force_local, r = free_and_strdup(&i->local, local); if (r < 0) return r; - i->force_local = force_local; - i->read_only = read_only; + + i->flags = flags; if (fstat(fd, &i->st) < 0) return -errno; diff --git a/src/import/import-tar.h b/src/import/import-tar.h index afbe98ad05..63b0bd4da6 100644 --- a/src/import/import-tar.h +++ b/src/import/import-tar.h @@ -3,6 +3,7 @@ #include "sd-event.h" +#include "import-common.h" #include "import-util.h" #include "macro.h" @@ -15,4 +16,4 @@ TarImport* tar_import_unref(TarImport *import); DEFINE_TRIVIAL_CLEANUP_FUNC(TarImport*, tar_import_unref); -int tar_import_start(TarImport *import, int fd, const char *local, bool force_local, bool read_only); +int tar_import_start(TarImport *import, int fd, const char *local, ImportFlags flags); diff --git a/src/import/import.c b/src/import/import.c index d358eec49c..842e1142f8 100644 --- a/src/import/import.c +++ b/src/import/import.c @@ -19,9 +19,8 @@ #include "string-util.h" #include "verbs.h" -static bool arg_force = false; -static bool arg_read_only = false; static const char *arg_image_root = "/var/lib/machines"; +static ImportFlags arg_import_flags = 0; static int interrupt_signal_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) { log_notice("Transfer aborted."); @@ -67,7 +66,7 @@ static int import_tar(int argc, char *argv[], void *userdata) { "Local image name '%s' is not valid.", local); - if (!arg_force) { + if (!FLAGS_SET(arg_import_flags, IMPORT_FORCE)) { r = image_find(IMAGE_MACHINE, local, NULL, NULL); if (r < 0) { if (r != -ENOENT) @@ -110,7 +109,7 @@ static int import_tar(int argc, char *argv[], void *userdata) { if (r < 0) return log_error_errno(r, "Failed to allocate importer: %m"); - r = tar_import_start(import, fd, local, arg_force, arg_read_only); + r = tar_import_start(import, fd, local, arg_import_flags); if (r < 0) return log_error_errno(r, "Failed to import image: %m"); @@ -160,7 +159,7 @@ static int import_raw(int argc, char *argv[], void *userdata) { "Local image name '%s' is not valid.", local); - if (!arg_force) { + if (!FLAGS_SET(arg_import_flags, IMPORT_FORCE)) { r = image_find(IMAGE_MACHINE, local, NULL, NULL); if (r < 0) { if (r != -ENOENT) @@ -203,7 +202,7 @@ static int import_raw(int argc, char *argv[], void *userdata) { if (r < 0) return log_error_errno(r, "Failed to allocate importer: %m"); - r = raw_import_start(import, fd, local, arg_force, arg_read_only); + r = raw_import_start(import, fd, local, arg_import_flags); if (r < 0) return log_error_errno(r, "Failed to import image: %m"); @@ -266,7 +265,7 @@ static int parse_argv(int argc, char *argv[]) { return version(); case ARG_FORCE: - arg_force = true; + arg_import_flags |= IMPORT_FORCE; break; case ARG_IMAGE_ROOT: @@ -274,7 +273,7 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_READ_ONLY: - arg_read_only = true; + arg_import_flags |= IMPORT_READ_ONLY; break; case '?': |