Merge pull request #3987 from keszybz/console-color-setup
Rework console color setup
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "env-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fs-util.h"
|
||||
@@ -1191,12 +1192,9 @@ int open_terminal_in_namespace(pid_t pid, const char *name, int mode) {
|
||||
return receive_one_fd(pair[0], 0);
|
||||
}
|
||||
|
||||
bool terminal_is_dumb(void) {
|
||||
static bool getenv_terminal_is_dumb(void) {
|
||||
const char *e;
|
||||
|
||||
if (!on_tty())
|
||||
return true;
|
||||
|
||||
e = getenv("TERM");
|
||||
if (!e)
|
||||
return true;
|
||||
@@ -1204,15 +1202,25 @@ bool terminal_is_dumb(void) {
|
||||
return streq(e, "dumb");
|
||||
}
|
||||
|
||||
bool terminal_is_dumb(void) {
|
||||
if (!on_tty())
|
||||
return true;
|
||||
|
||||
return getenv_terminal_is_dumb();
|
||||
}
|
||||
|
||||
bool colors_enabled(void) {
|
||||
static int enabled = -1;
|
||||
|
||||
if (_unlikely_(enabled < 0)) {
|
||||
const char *colors;
|
||||
int val;
|
||||
|
||||
colors = getenv("SYSTEMD_COLORS");
|
||||
if (colors)
|
||||
enabled = parse_boolean(colors) != 0;
|
||||
val = getenv_bool("SYSTEMD_COLORS");
|
||||
if (val >= 0)
|
||||
enabled = val;
|
||||
else if (getpid() == 1)
|
||||
/* PID1 outputs to the console without holding it open all the time */
|
||||
enabled = !getenv_terminal_is_dumb();
|
||||
else
|
||||
enabled = !terminal_is_dumb();
|
||||
}
|
||||
|
||||
+5
-4
@@ -1505,7 +1505,8 @@ int main(int argc, char *argv[]) {
|
||||
if (getpid() == 1) {
|
||||
/* Don't limit the core dump size, so that coredump handlers such as systemd-coredump (which honour the limit)
|
||||
* will process core dumps for system services by default. */
|
||||
(void) setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY));
|
||||
if (setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY)) < 0)
|
||||
log_warning_errno(errno, "Failed to set RLIMIT_CORE: %m");
|
||||
|
||||
/* But at the same time, turn off the core_pattern logic by default, so that no coredumps are stored
|
||||
* until the systemd-coredump tool is enabled via sysctl. */
|
||||
@@ -2013,9 +2014,6 @@ finish:
|
||||
log_error_errno(r, "Failed to switch root, trying to continue: %m");
|
||||
}
|
||||
|
||||
/* Reopen the console */
|
||||
(void) make_console_stdio();
|
||||
|
||||
args_size = MAX(6, argc+1);
|
||||
args = newa(const char*, args_size);
|
||||
|
||||
@@ -2063,6 +2061,9 @@ finish:
|
||||
arg_serialization = safe_fclose(arg_serialization);
|
||||
fds = fdset_free(fds);
|
||||
|
||||
/* Reopen the console */
|
||||
(void) make_console_stdio();
|
||||
|
||||
for (j = 1, i = 1; j < (unsigned) argc; j++)
|
||||
args[i++] = argv[j];
|
||||
args[i++] = NULL;
|
||||
|
||||
Reference in New Issue
Block a user