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:
parent
0c1792efe4
commit
ae5b395887
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user