{
struct stat st;
struct termios tt, ttt;
+ struct winsize ws;
cxt->tty_mode = (mode_t) getlogindefs_num("TTYPERM", TTY_MODE);
}
#endif
+ /* The TTY size might be reset to 0x0 by the kernel when we close the stdin/stdout/stderr file
+ * descriptors so let's save the size now so we can reapply it later */
+ memset(&ws, 0, sizeof(struct winsize));
+ if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0)
+ syslog(LOG_WARNING, _("TIOCGWINSZ ioctl failed: %m"));
+
tcgetattr(0, &tt);
ttt = tt;
ttt.c_cflag &= ~HUPCL;
/* restore tty modes */
tcsetattr(0, TCSAFLUSH, &tt);
+
+ /* Restore tty size */
+ if (ws.ws_row > 0 || ws.ws_col > 0)
+ if (ioctl(STDIN_FILENO, TIOCSWINSZ, &ws) < 0)
+ syslog(LOG_WARNING, _("TIOCSWINSZ ioctl failed: %m"));
}
/*