terminal-util: unify code that resets /dev/console in common helper
We have pretty much the same code at two places, let's make it one.
This commit is contained in:
+26
-19
@@ -582,6 +582,31 @@ int vt_disallocate(const char *name) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void reset_dev_console_fd(int fd, bool switch_to_text) {
|
||||
int r;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = reset_terminal_fd(fd, switch_to_text);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to reset /dev/console, ignoring: %m");
|
||||
|
||||
unsigned rows, cols;
|
||||
r = proc_cmdline_tty_size("/dev/console", &rows, &cols);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to get /dev/console size, ignoring: %m");
|
||||
else if (r > 0) {
|
||||
r = terminal_set_size_fd(fd, NULL, rows, cols);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to set configured terminal size on /dev/console, ignoring: %m");
|
||||
} else
|
||||
(void) terminal_fix_size(fd, fd);
|
||||
|
||||
r = terminal_reset_ansi_seq(fd);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to reset /dev/console using ANSI sequences, ignoring: %m");
|
||||
}
|
||||
|
||||
int make_console_stdio(void) {
|
||||
int fd, r;
|
||||
|
||||
@@ -598,25 +623,7 @@ int make_console_stdio(void) {
|
||||
return log_error_errno(r, "Failed to make /dev/null stdin/stdout/stderr: %m");
|
||||
|
||||
} else {
|
||||
unsigned rows, cols;
|
||||
|
||||
r = reset_terminal_fd(fd, /* switch_to_text= */ true);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to reset terminal, ignoring: %m");
|
||||
|
||||
r = proc_cmdline_tty_size("/dev/console", &rows, &cols);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to get terminal size, ignoring: %m");
|
||||
else if (r > 0) {
|
||||
r = terminal_set_size_fd(fd, NULL, rows, cols);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to set configured terminal size, ignoring: %m");
|
||||
} else
|
||||
(void) terminal_fix_size(fd, fd);
|
||||
|
||||
r = terminal_reset_ansi_seq(fd);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to reset terminal using ANSI sequences, ignoring: %m");
|
||||
reset_dev_console_fd(fd, /* switch_to_text= */ true);
|
||||
|
||||
r = rearrange_stdio(fd, fd, fd); /* This invalidates 'fd' both on success and on failure. */
|
||||
if (r < 0)
|
||||
|
||||
@@ -156,6 +156,7 @@ bool tty_is_console(const char *tty) _pure_;
|
||||
int vtnr_from_tty(const char *tty);
|
||||
const char* default_term_for_tty(const char *tty);
|
||||
|
||||
void reset_dev_console_fd(int fd, bool switch_to_text);
|
||||
int make_console_stdio(void);
|
||||
|
||||
int fd_columns(int fd);
|
||||
|
||||
Reference in New Issue
Block a user