ptyfwd: when we can't copy the window size from caller, use $LINES and $COLUMNS

This way users can directly influence the tty size if they like when
nspawn is invoked as a service and thus stdin/stdout/stderr are not
connected to a TTY.
This commit is contained in:
Lennart Poettering 2018-07-30 20:57:22 +02:00
parent c6885f5f36
commit da22bdbc05
1 changed files with 12 additions and 2 deletions

View File

@ -20,6 +20,7 @@
#include "log.h"
#include "macro.h"
#include "ptyfwd.h"
#include "terminal-util.h"
#include "time-util.h"
struct PTYForward {
@ -421,8 +422,17 @@ int pty_forward_new(
f->master = master;
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) >= 0)
(void) ioctl(master, TIOCSWINSZ, &ws);
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0) {
/* If we can't get the resolution from the output fd, then use our internal, regular width/height,
* i.e. something derived from $COLUMNS and $LINES if set. */
ws = (struct winsize) {
.ws_row = lines(),
.ws_col = columns(),
};
}
(void) ioctl(master, TIOCSWINSZ, &ws);
if (!(flags & PTY_FORWARD_READ_ONLY)) {
if (tcgetattr(STDIN_FILENO, &f->saved_stdin_attr) >= 0) {