svn commit: r364224 - stable/12/usr.bin/script
Mark Johnston
markj at FreeBSD.org
Fri Aug 14 00:55:24 UTC 2020
Author: markj
Date: Fri Aug 14 00:55:23 2020
New Revision: 364224
URL: https://svnweb.freebsd.org/changeset/base/364224
Log:
MFC r364039:
script: Put the terminal in raw mode when playing back a session.
PR: 248377
Modified:
stable/12/usr.bin/script/script.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/usr.bin/script/script.c
==============================================================================
--- stable/12/usr.bin/script/script.c Fri Aug 14 00:18:18 2020 (r364223)
+++ stable/12/usr.bin/script/script.c Fri Aug 14 00:55:23 2020 (r364224)
@@ -428,6 +428,33 @@ consume(FILE *fp, off_t len, char *buf, int reg)
} while (0/*CONSTCOND*/)
static void
+termset(void)
+{
+ struct termios traw;
+
+ if (tcgetattr(STDOUT_FILENO, &tt) == -1) {
+ if (errno == EBADF)
+ err(1, "%d not valid fd", STDOUT_FILENO);
+ /* errno == ENOTTY */
+ return;
+ }
+ ttyflg = 1;
+ traw = tt;
+ cfmakeraw(&traw);
+ traw.c_lflag |= ISIG;
+ (void)tcsetattr(STDOUT_FILENO, TCSANOW, &traw);
+}
+
+static void
+termreset(void)
+{
+ if (ttyflg) {
+ tcsetattr(STDOUT_FILENO, TCSADRAIN, &tt);
+ ttyflg = 0;
+ }
+}
+
+static void
playback(FILE *fp)
{
struct timespec tsi, tso;
@@ -470,8 +497,11 @@ playback(FILE *fp)
ctime(&tclock));
tsi = tso;
(void)consume(fp, stamp.scr_len, buf, reg);
+ termset();
+ atexit(termreset);
break;
case 'e':
+ termreset();
if (!qflg)
(void)printf("\nScript done on %s",
ctime(&tclock));
More information about the svn-src-stable-12
mailing list