From 9289045238b5047299eae8fad976e3a36627a046 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 5 Jun 2018 16:07:49 +0200 Subject: [PATCH] main: combine a some if checks Let's merge a few if blocks that are conditioned out the same way. No change in behaviour. --- src/core/main.c | 126 +++++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 65 deletions(-) diff --git a/src/core/main.c b/src/core/main.c index 4305a3ffd8e..1e75ad7203d 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -2125,7 +2125,6 @@ static bool early_skip_setup_check(int argc, char *argv[]) { * anyway, even if in that case we also do deserialization. */ for (i = 1; i < argc; i++) { - if (streq(argv[i], "--switched-root")) return false; /* If we switched root, don't skip the setup. */ else if (streq(argv[i], "--deserialize")) @@ -2177,8 +2176,8 @@ int main(int argc, char *argv[]) { /* Disable the umask logic */ umask(0); - /* Make sure that at least initially we do not ever log to journald/syslogd, because it might not be activated - * yet (even though the log socket for it exists). */ + /* Make sure that at least initially we do not ever log to journald/syslogd, because it might not be + * activated yet (even though the log socket for it exists). */ log_set_prohibit_ipc(true); /* Always reopen /dev/console when running as PID 1 or one of its pre-execve() children. This is @@ -2186,62 +2185,70 @@ int main(int argc, char *argv[]) { * child process right before execve()'ing the actual binary, at a point in time where socket * activation stderr/stdout area already set up. */ log_set_always_reopen_console(true); - } - if (getpid_cached() == 1 && detect_container() <= 0) { + if (detect_container() <= 0) { - /* Running outside of a container as PID 1 */ - arg_system = true; - log_set_target(LOG_TARGET_KMSG); - log_open(); + /* Running outside of a container as PID 1 */ + arg_system = true; + log_set_target(LOG_TARGET_KMSG); + log_open(); - if (in_initrd()) - initrd_timestamp = userspace_timestamp; + if (in_initrd()) + initrd_timestamp = userspace_timestamp; - if (!skip_setup) { - r = mount_setup_early(); - if (r < 0) { - error_message = "Failed to mount early API filesystems"; - goto finish; + if (!skip_setup) { + r = mount_setup_early(); + if (r < 0) { + error_message = "Failed to mount early API filesystems"; + goto finish; + } + + r = initialize_security( + &loaded_policy, + &security_start_timestamp, + &security_finish_timestamp, + &error_message); + if (r < 0) + goto finish; } - r = initialize_security( - &loaded_policy, - &security_start_timestamp, - &security_finish_timestamp, - &error_message); - if (r < 0) + if (mac_selinux_init() < 0) { + error_message = "Failed to initialize SELinux policy"; goto finish; - } + } - if (mac_selinux_init() < 0) { - error_message = "Failed to initialize SELinux policy"; - goto finish; + if (!skip_setup) + initialize_clock(); + + /* Set the default for later on, but don't actually open the logs like this for now. Note that + * if we are transitioning from the initrd there might still be journal fd open, and we + * shouldn't attempt opening that before we parsed /proc/cmdline which might redirect output + * elsewhere. */ + log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); + + } else { + /* Running inside a container, as PID 1 */ + arg_system = true; + log_set_target(LOG_TARGET_CONSOLE); + log_open(); + + /* For later on, see above... */ + log_set_target(LOG_TARGET_JOURNAL); + + /* clear the kernel timestamp, + * because we are in a container */ + kernel_timestamp = DUAL_TIMESTAMP_NULL; } - if (!skip_setup) - initialize_clock(); - - /* Set the default for later on, but don't actually - * open the logs like this for now. Note that if we - * are transitioning from the initrd there might still - * be journal fd open, and we shouldn't attempt - * opening that before we parsed /proc/cmdline which - * might redirect output elsewhere. */ - log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); - - } else if (getpid_cached() == 1) { - /* Running inside a container, as PID 1 */ - arg_system = true; - log_set_target(LOG_TARGET_CONSOLE); - log_open(); + initialize_coredump(skip_setup); - /* For later on, see above... */ - log_set_target(LOG_TARGET_JOURNAL); + r = fixup_environment(); + if (r < 0) { + log_emergency_errno(r, "Failed to fix up PID 1 environment: %m"); + error_message = "Failed to fix up PID1 environment"; + goto finish; + } - /* clear the kernel timestamp, - * because we are in a container */ - kernel_timestamp = DUAL_TIMESTAMP_NULL; } else { /* Running as user instance */ arg_system = false; @@ -2253,24 +2260,14 @@ int main(int argc, char *argv[]) { kernel_timestamp = DUAL_TIMESTAMP_NULL; } - initialize_coredump(skip_setup); - - r = fixup_environment(); - if (r < 0) { - log_emergency_errno(r, "Failed to fix up PID 1 environment: %m"); - error_message = "Failed to fix up PID1 environment"; - goto finish; - } - if (arg_system) { - - /* Try to figure out if we can use colors with the console. No - * need to do that for user instances since they never log - * into the console. */ + /* Try to figure out if we can use colors with the console. No need to do that for user instances since + * they never log into the console. */ log_show_color(colors_enabled()); + r = make_null_stdio(); if (r < 0) - log_warning_errno(r, "Failed to redirect standard streams to /dev/null: %m"); + log_warning_errno(r, "Failed to redirect standard streams to /dev/null, ignoring: %m"); } /* Mount /proc, /sys and friends, so that /proc/cmdline and @@ -2418,10 +2415,10 @@ int main(int argc, char *argv[]) { finish: pager_close(); - if (m) + if (m) { arg_shutdown_watchdog = m->shutdown_watchdog; - - m = manager_free(m); + m = manager_free(m); + } free_arguments(); mac_selinux_finish(); @@ -2454,7 +2451,6 @@ finish: if (shutdown_verb) { r = become_shutdown(shutdown_verb, retval); - log_error_errno(r, "Failed to execute shutdown binary, %s: %m", getpid_cached() == 1 ? "freezing" : "quitting"); error_message = "Failed to execute shutdown binary"; } -- 2.47.3