X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmain.c;h=53a455b5059fb3413ab9767a373b58379e487a1e;hp=f1fa5691120ca26f9002b7f67de231bf1b9e638e;hb=b2bb3dbed9607c440b1a9ccacc515e28136d39ae;hpb=1ceec64c089c796028716c3ef9721ed0f0399569 diff --git a/src/main.c b/src/main.c index f1fa56911..53a455b50 100644 --- a/src/main.c +++ b/src/main.c @@ -66,6 +66,7 @@ static bool arg_show_status = true; static bool arg_sysv_console = true; static bool arg_mount_auto = true; static bool arg_swap_auto = true; +static char *arg_console = NULL; static FILE* serialization = NULL; @@ -335,6 +336,26 @@ static int parse_proc_cmdline_word(const char *word) { "systemd.log_color=0|1 Highlight important log messages\n" "systemd.log_location=0|1 Include code location in log messages\n"); + } else if (startswith(word, "console=")) { + const char *k; + size_t l; + char *w = NULL; + + k = word + 8; + l = strcspn(k, ","); + + /* Ignore the console setting if set to a VT */ + if (l < 4 || + !startswith(k, "tty") || + k[3+strspn(k+3, "0123456789")] != 0) { + + if (!(w = strndup(k, l))) + return -ENOMEM; + } + + free(arg_console); + arg_console = w; + } else if (streq(word, "quiet")) { arg_show_status = false; arg_sysv_console = false; @@ -993,6 +1014,9 @@ int main(int argc, char *argv[]) { m->mount_auto = arg_mount_auto; m->swap_auto = arg_swap_auto; + if (arg_console) + manager_set_console(m, arg_console); + if ((r = manager_startup(m, serialization, fds)) < 0) log_error("Failed to fully start up daemon: %s", strerror(-r)); @@ -1090,9 +1114,12 @@ finish: manager_free(m); free(arg_default_unit); + free(arg_console); dbus_shutdown(); + label_finish(); + if (reexecute) { const char *args[15]; unsigned i = 0; @@ -1157,7 +1184,5 @@ finish: if (getpid() == 1) freeze(); - label_finish(); - return retval; }