diff options
Diffstat (limited to 'src/fstab-generator/fstab-generator.c')
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 482229b4a5..55a8242fcf 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -14,9 +14,11 @@ #include "fstab-util.h" #include "generator.h" #include "log.h" +#include "main-func.h" #include "mkdir.h" #include "mount-setup.h" #include "mount-util.h" +#include "mountpoint-util.h" #include "parse-util.h" #include "path-util.h" #include "proc-cmdline.h" @@ -38,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; @@ -51,6 +53,14 @@ static char *arg_usr_fstype = NULL; static char *arg_usr_options = NULL; static VolatileMode arg_volatile_mode = _VOLATILE_MODE_INVALID; +STATIC_DESTRUCTOR_REGISTER(arg_root_what, freep); +STATIC_DESTRUCTOR_REGISTER(arg_root_fstype, freep); +STATIC_DESTRUCTOR_REGISTER(arg_root_options, freep); +STATIC_DESTRUCTOR_REGISTER(arg_root_hash, freep); +STATIC_DESTRUCTOR_REGISTER(arg_usr_what, freep); +STATIC_DESTRUCTOR_REGISTER(arg_usr_fstype, freep); +STATIC_DESTRUCTOR_REGISTER(arg_usr_options, freep); + static int write_options(FILE *f, const char *options) { _cleanup_free_ char *o = NULL; @@ -528,7 +538,7 @@ static int parse_fstab(bool initrd) { if (!what) return log_oom(); - if (is_device_path(what) && path_is_read_only_fs("sys") > 0) { + if (is_device_path(what) && path_is_read_only_fs("/sys") > 0) { log_info("Running in a container, ignoring fstab device entry for %s.", what); continue; } @@ -857,25 +867,11 @@ static int determine_root(void) { return 1; } -int main(int argc, char *argv[]) { - int r = 0; - - if (argc > 1 && argc != 4) { - log_error("This program takes three or no arguments."); - return EXIT_FAILURE; - } - - if (argc > 1) - arg_dest = argv[1]; - if (argc > 3) - arg_dest_late = argv[3]; - - log_set_prohibit_ipc(true); - log_set_target(LOG_TARGET_AUTO); - log_parse_environment(); - log_open(); +static int run(const char *dest, const char *dest_early, const char *dest_late) { + int r; - umask(0022); + 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) @@ -920,14 +916,7 @@ int main(int argc, char *argv[]) { } } - free(arg_root_what); - free(arg_root_fstype); - free(arg_root_options); - free(arg_root_hash); - - free(arg_usr_what); - free(arg_usr_fstype); - free(arg_usr_options); - - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + return r; } + +DEFINE_MAIN_GENERATOR_FUNCTION(run); |