X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmain.c;h=ec2733e1855a74bfb764f558b86c930283a9a01b;hb=8745297f9853c4a17bac69e1b7e652fe81bc1940;hp=7a829cea5c793a2fb4235f052e2ea90163f631f0;hpb=8efe3c0114758f229273f17944fd6f2952b10c52;p=elogind.git diff --git a/src/main.c b/src/main.c index 7a829cea5..ec2733e18 100644 --- a/src/main.c +++ b/src/main.c @@ -58,7 +58,7 @@ static int crash_chvt = -1; static bool confirm_spawn = false; static FILE* serialization = NULL; -_noreturn static void freeze(void) { +_noreturn_ static void freeze(void) { for (;;) pause(); } @@ -66,7 +66,7 @@ _noreturn static void freeze(void) { static void nop_handler(int sig) { } -_noreturn static void crash(int sig) { +_noreturn_ static void crash(int sig) { if (!dump_core) log_error("Caught <%s>, not dumping core.", strsignal(sig)); @@ -233,8 +233,8 @@ static int parse_proc_cmdline_word(const char *word) { "5", SPECIAL_RUNLEVEL5_TARGET }; - if (startswith(word, "systemd.default=")) - return set_default_unit(word + 16); + if (startswith(word, "systemd.unit=")) + return set_default_unit(word + 13); else if (startswith(word, "systemd.log_target=")) { @@ -246,6 +246,16 @@ static int parse_proc_cmdline_word(const char *word) { if (log_set_max_level_from_string(word + 18) < 0) log_warning("Failed to parse log level %s. Ignoring.", word + 18); + } else if (startswith(word, "systemd.log_color=")) { + + if (log_show_color_from_string(word + 18) < 0) + log_warning("Failed to parse log color setting %s. Ignoring.", word + 18); + + } else if (startswith(word, "systemd.log_location=")) { + + if (log_show_location_from_string(word + 21) < 0) + log_warning("Failed to parse log location setting %s. Ignoring.", word + 21); + } else if (startswith(word, "systemd.dump_core=")) { int r; @@ -283,14 +293,17 @@ static int parse_proc_cmdline_word(const char *word) { log_warning("Unknown kernel switch %s. Ignoring.", word); - log_info("Supported kernel switches:"); - log_info("systemd.default=UNIT Default unit to start"); - log_info("systemd.log_target=console|kmsg|syslog Log target"); - log_info("systemd.log_level=LEVEL Log level"); - log_info("systemd.dump_core=0|1 Dump core on crash"); - log_info("systemd.crash_shell=0|1 On crash run shell"); - log_info("systemd.crash_chvt=N Change to VT #N on crash"); - log_info("systemd.confirm_spawn=0|1 Confirm every process spawn"); + log_info("Supported kernel switches:\n" + "systemd.unit=UNIT Default unit to start\n" + "systemd.log_target=console|kmsg|syslog| Log target\n" + " syslog-org-kmsg|null\n" + "systemd.log_level=LEVEL Log level\n" + "systemd.log_color=0|1 Highlight important log messages\n" + "systemd.log_location=0|1 Include code location in log messages\n" + "systemd.dump_core=0|1 Dump core on crash\n" + "systemd.crash_shell=0|1 On crash run shell\n" + "systemd.crash_chvt=N Change to VT #N on crash\n" + "systemd.confirm_spawn=0|1 Confirm every process spawn"); } else { unsigned i; @@ -343,7 +356,9 @@ static int parse_argv(int argc, char *argv[]) { enum { ARG_LOG_LEVEL = 0x100, ARG_LOG_TARGET, - ARG_DEFAULT, + ARG_LOG_COLOR, + ARG_LOG_LOCATION, + ARG_UNIT, ARG_RUNNING_AS, ARG_TEST, ARG_DUMP_CONFIGURATION_ITEMS, @@ -355,7 +370,9 @@ static int parse_argv(int argc, char *argv[]) { static const struct option options[] = { { "log-level", required_argument, NULL, ARG_LOG_LEVEL }, { "log-target", required_argument, NULL, ARG_LOG_TARGET }, - { "default", required_argument, NULL, ARG_DEFAULT }, + { "log-color", optional_argument, NULL, ARG_LOG_COLOR }, + { "log-location", optional_argument, NULL, ARG_LOG_LOCATION }, + { "unit", required_argument, NULL, ARG_UNIT }, { "running-as", required_argument, NULL, ARG_RUNNING_AS }, { "test", no_argument, NULL, ARG_TEST }, { "help", no_argument, NULL, 'h' }, @@ -392,7 +409,25 @@ static int parse_argv(int argc, char *argv[]) { break; - case ARG_DEFAULT: + case ARG_LOG_COLOR: + + if ((r = log_show_color_from_string(optarg)) < 0) { + log_error("Failed to parse log color setting %s.", optarg); + return r; + } + + break; + + case ARG_LOG_LOCATION: + + if ((r = log_show_location_from_string(optarg)) < 0) { + log_error("Failed to parse log location setting %s.", optarg); + return r; + } + + break; + + case ARG_UNIT: if ((r = set_default_unit(optarg)) < 0) { log_error("Failed to set default unit %s: %s", optarg, strerror(-r)); @@ -495,16 +530,19 @@ static int parse_argv(int argc, char *argv[]) { static int help(void) { printf("%s [options]\n\n" + "Starts up and maintains the system or a session.\n\n" " -h --help Show this help\n" - " --default=UNIT Set default unit\n" - " --log-level=LEVEL Set log level\n" - " --log-target=TARGET Set log target (console, syslog, kmsg, syslog-or-kmsg)\n" + " --unit=UNIT Set default unit\n" " --running-as=AS Set running as (init, system, session)\n" " --test Determine startup sequence, dump it and exit\n" " --dump-configuration-items Dump understood unit configuration items\n" " --confirm-spawn Ask for confirmation when spawning processes\n" - " --introspect[=INTERFACE] Extract D-Bus interface data\n", - __progname); + " --introspect[=INTERFACE] Extract D-Bus interface data\n" + " --log-level=LEVEL Set log level\n" + " --log-target=TARGET Set log target (console, syslog, kmsg, syslog-or-kmsg, null)\n" + " --log-color[=0|1] Highlight import log messages\n" + " --log-location[=0|1] Include code location in log messages\n", + program_invocation_short_name); return 0; } @@ -571,11 +609,17 @@ int main(int argc, char *argv[]) { FDSet *fds = NULL; bool reexecute = false; + log_show_color(true); + log_show_location(false); + log_set_max_level(LOG_DEBUG); + if (getpid() == 1) { running_as = MANAGER_INIT; log_set_target(LOG_TARGET_SYSLOG_OR_KMSG); - } else + } else { running_as = MANAGER_SESSION; + log_set_target(LOG_TARGET_CONSOLE); + } if (set_default_unit(SPECIAL_DEFAULT_TARGET) < 0) goto finish;