1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 01:55:22 +03:00

basic/terminal-util: cache value for colors_enabled

After all it's something that we query over and over.
For example, systemctl calls colors_enabled() four times for each failing
service. The compiler is unable to optimize those calls away because they
(potentially) accesses external and global state through on_tty() and
getenv().
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-04-19 21:30:14 -04:00
parent 0c1792efe4
commit ae5b395887

View File

@ -1135,14 +1135,19 @@ int open_terminal_in_namespace(pid_t pid, const char *name, int mode) {
}
bool colors_enabled(void) {
const char *colors;
static int enabled = -1;
colors = getenv("SYSTEMD_COLORS");
if (!colors) {
if (streq_ptr(getenv("TERM"), "dumb"))
return false;
return on_tty();
if (_unlikely_(enabled < 0)) {
const char *colors;
colors = getenv("SYSTEMD_COLORS");
if (colors)
enabled = parse_boolean(colors) != 0;
else if (streq_ptr(getenv("TERM"), "dumb"))
enabled = false;
else
enabled = on_tty();
}
return parse_boolean(colors) != 0;
return enabled;
}