diff options
-rw-r--r-- | src/cryptsetup/cryptsetup-generator.c | 15 | ||||
-rw-r--r-- | src/debug-generator/debug-generator.c | 16 | ||||
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 20 | ||||
-rw-r--r-- | src/rc-local-generator/rc-local-generator.c | 15 | ||||
-rw-r--r-- | src/run-generator/run-generator.c | 19 | ||||
-rw-r--r-- | src/shared/generator.h | 16 | ||||
-rw-r--r-- | src/shared/main-func.h | 9 | ||||
-rw-r--r-- | src/sysv-generator/sysv-generator.c | 16 | ||||
-rw-r--r-- | src/veritysetup/veritysetup-generator.c | 18 |
9 files changed, 51 insertions, 93 deletions
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c index 746505a181..8759a26148 100644 --- a/src/cryptsetup/cryptsetup-generator.c +++ b/src/cryptsetup/cryptsetup-generator.c @@ -13,7 +13,6 @@ #include "hashmap.h" #include "id128-util.h" #include "log.h" -#include "main-func.h" #include "mkdir.h" #include "parse-util.h" #include "path-util.h" @@ -33,7 +32,7 @@ typedef struct crypto_device { bool create; } crypto_device; -static const char *arg_dest = "/tmp"; +static const char *arg_dest = NULL; static bool arg_enabled = true; static bool arg_read_crypttab = true; static bool arg_whitelist = false; @@ -580,16 +579,10 @@ static int add_proc_cmdline_devices(void) { DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(crypt_device_hash_ops, char, string_hash_func, string_compare_func, crypto_device, crypt_device_free); -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r; - log_setup_generator(); - - if (argc > 1 && argc != 4) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program takes three or no arguments."); - - if (argc > 1) - arg_dest = argv[1]; + assert_se(arg_dest = dest); arg_disks = hashmap_new(&crypt_device_hash_ops); if (!arg_disks) @@ -613,4 +606,4 @@ static int run(int argc, char *argv[]) { return 0; } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c index 2615aa189d..fa4ca57bbf 100644 --- a/src/debug-generator/debug-generator.c +++ b/src/debug-generator/debug-generator.c @@ -2,7 +2,6 @@ #include "alloc-util.h" #include "generator.h" -#include "main-func.h" #include "mkdir.h" #include "parse-util.h" #include "proc-cmdline.h" @@ -12,8 +11,8 @@ #include "unit-name.h" #include "util.h" +static const char *arg_dest = NULL; static char *arg_default_unit = NULL; -static const char *arg_dest = "/tmp"; static char **arg_mask = NULL; static char **arg_wants = NULL; static bool arg_debug_shell = false; @@ -142,17 +141,10 @@ static int generate_wants_symlinks(void) { return r; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r, q; - log_setup_generator(); - - if (argc > 1 && argc != 4) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "This program takes three or no arguments."); - - if (argc > 1) - arg_dest = argv[2]; + assert_se(arg_dest = dest_early); r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_RD_STRICT | PROC_CMDLINE_STRIP_RD_PREFIX); if (r < 0) @@ -170,4 +162,4 @@ static int run(int argc, char *argv[]) { return r < 0 ? r : q; } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 8acee53d6c..d5e5412059 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -40,8 +40,8 @@ typedef enum MountpointFlags { GROWFS = 1 << 4, } MountpointFlags; -static const char *arg_dest = "/tmp"; -static const char *arg_dest_late = "/tmp"; +static const char *arg_dest = NULL; +static const char *arg_dest_late = NULL; static bool arg_fstab_enabled = true; static char *arg_root_what = NULL; static char *arg_root_fstype = NULL; @@ -868,19 +868,11 @@ static int determine_root(void) { return 1; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r; - log_setup_generator(); - - if (argc > 1 && argc != 4) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "This program takes three or no arguments."); - - if (argc > 1) - arg_dest = argv[1]; - if (argc > 3) - arg_dest_late = argv[3]; + assert_se(arg_dest = dest); + assert_se(arg_dest_late = dest_late); r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0); if (r < 0) @@ -928,4 +920,4 @@ static int run(int argc, char *argv[]) { return r; } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/rc-local-generator/rc-local-generator.c b/src/rc-local-generator/rc-local-generator.c index cd5510bf12..7a3948e92d 100644 --- a/src/rc-local-generator/rc-local-generator.c +++ b/src/rc-local-generator/rc-local-generator.c @@ -6,12 +6,11 @@ #include "generator.h" #include "log.h" -#include "main-func.h" #include "mkdir.h" #include "string-util.h" #include "util.h" -static const char *arg_dest = "/tmp"; +static const char *arg_dest = NULL; /* So you are reading this, and might wonder: why is this implemented as a generator rather than as a plain, statically * enabled service that carries appropriate ConditionFileIsExecutable= lines? The answer is this: conditions bypass @@ -55,16 +54,10 @@ static int check_executable(const char *path) { return 0; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r = 0, k = 0; - log_setup_generator(); - - if (argc > 1 && argc != 4) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program takes three or no arguments."); - - if (argc > 1) - arg_dest = argv[1]; + assert_se(arg_dest = dest); if (check_executable(RC_LOCAL_SCRIPT_PATH_START) >= 0) { log_debug("Automatically adding rc-local.service."); @@ -81,4 +74,4 @@ static int run(int argc, char *argv[]) { return r < 0 ? r : k; } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c index 243a426cda..a5dfac01d4 100644 --- a/src/run-generator/run-generator.c +++ b/src/run-generator/run-generator.c @@ -5,13 +5,12 @@ #include "fd-util.h" #include "fileio.h" #include "generator.h" -#include "main-func.h" #include "mkdir.h" #include "proc-cmdline.h" #include "specifier.h" #include "strv.h" -static const char *arg_dest = "/tmp"; +static const char *arg_dest = NULL; static char **arg_commands = NULL; static char *arg_success_action = NULL; static char *arg_failure_action = NULL; @@ -122,20 +121,10 @@ static int generate(void) { return 0; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r; - log_setup_generator(); - - if (argc > 1 && argc != 4) { - log_error("This program takes three or no arguments."); - return -EINVAL; - } - - if (argc > 1) - arg_dest = argv[1]; - - umask(0022); + assert_se(arg_dest = dest); r = proc_cmdline_parse(parse, NULL, PROC_CMDLINE_RD_STRICT|PROC_CMDLINE_STRIP_RD_PREFIX); if (r < 0) @@ -144,4 +133,4 @@ static int run(int argc, char *argv[]) { return generate(); } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/shared/generator.h b/src/shared/generator.h index f1a055401a..5a1c1e32f7 100644 --- a/src/shared/generator.h +++ b/src/shared/generator.h @@ -3,6 +3,8 @@ #include <stdio.h> +#include "main-func.h" + int generator_open_unit_file( const char *dest, const char *source, @@ -49,3 +51,17 @@ int generator_hook_up_growfs( const char *target); void log_setup_generator(void); + +/* Similar to DEFINE_MAIN_FUNCTION, but initializes logging and assigns positional arguments. */ +#define DEFINE_MAIN_GENERATOR_FUNCTION(impl) \ + _DEFINE_MAIN_FUNCTION( \ + ({ \ + log_setup_generator(); \ + if (argc > 1 && argc != 4) \ + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), \ + "This program takes zero or three arguments."); \ + }), \ + impl(argc > 1 ? argv[1] : "/tmp", \ + argc > 1 ? argv[2] : "/tmp", \ + argc > 1 ? argv[3] : "/tmp"), \ + r < 0 ? EXIT_FAILURE : EXIT_SUCCESS) diff --git a/src/shared/main-func.h b/src/shared/main-func.h index ab6b272117..3c182e802b 100644 --- a/src/shared/main-func.h +++ b/src/shared/main-func.h @@ -9,10 +9,11 @@ #include "spawn-polkit-agent.h" #include "static-destruct.h" -#define _DEFINE_MAIN_FUNCTION(impl, ret) \ +#define _DEFINE_MAIN_FUNCTION(intro, impl, ret) \ int main(int argc, char *argv[]) { \ int r; \ - r = impl(argc, argv); \ + intro; \ + r = impl; \ static_destruct(); \ ask_password_agent_close(); \ polkit_agent_close(); \ @@ -24,10 +25,10 @@ /* Negative return values from impl are mapped to EXIT_FAILURE, and * everything else means success! */ #define DEFINE_MAIN_FUNCTION(impl) \ - _DEFINE_MAIN_FUNCTION(impl, r < 0 ? EXIT_FAILURE : EXIT_SUCCESS) + _DEFINE_MAIN_FUNCTION(,impl(argc, argv), r < 0 ? EXIT_FAILURE : EXIT_SUCCESS) /* Zero is mapped to EXIT_SUCCESS, negative values are mapped to EXIT_FAILURE, * and postive values are propagated. * Note: "true" means failure! */ #define DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(impl) \ - _DEFINE_MAIN_FUNCTION(impl, r < 0 ? EXIT_FAILURE : r) + _DEFINE_MAIN_FUNCTION(,impl(argc, argv), r < 0 ? EXIT_FAILURE : r) diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c index c4acdc4a50..514b6e0169 100644 --- a/src/sysv-generator/sysv-generator.c +++ b/src/sysv-generator/sysv-generator.c @@ -42,7 +42,7 @@ static const struct { * means they are shut down anyway at system power off if running. */ }; -static const char *arg_dest = "/tmp"; +static const char *arg_dest = NULL; typedef struct SysvStub { char *name; @@ -917,22 +917,14 @@ finish: return r; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { _cleanup_(free_sysvstub_hashmapp) Hashmap *all_services = NULL; _cleanup_(lookup_paths_free) LookupPaths lp = {}; SysvStub *service; Iterator j; int r; - log_setup_generator(); - - if (argc > 1 && argc != 4) { - log_error("This program takes three or no arguments."); - return -EINVAL; - } - - if (argc > 1) - arg_dest = argv[3]; + assert_se(arg_dest = dest_late); r = lookup_paths_init(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL); if (r < 0) @@ -961,4 +953,4 @@ static int run(int argc, char *argv[]) { return 0; } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); diff --git a/src/veritysetup/veritysetup-generator.c b/src/veritysetup/veritysetup-generator.c index 51996ec37e..65a4e7b0fd 100644 --- a/src/veritysetup/veritysetup-generator.c +++ b/src/veritysetup/veritysetup-generator.c @@ -204,16 +204,10 @@ static int determine_devices(void) { return 1; } -static int run(int argc, char *argv[]) { +static int run(const char *dest, const char *dest_early, const char *dest_late) { int r; - log_setup_generator(); - - if (argc > 1 && argc != 4) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program takes three or no arguments."); - - if (argc > 1) - arg_dest = argv[1]; + assert_se(arg_dest = dest); r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_STRIP_RD_PREFIX); if (r < 0) @@ -229,11 +223,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = create_device(); - if (r < 0) - return r; - - return 0; + return create_device(); } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_GENERATOR_FUNCTION(run); |