ref: b460f85f35689715048a461e854ca743584a746c
parent: 21304a3964b4c85f9440dba1d8ae1631df808a46
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Nov 26 06:16:00 EST 2023
More portable code for setting raw mode.
--- a/src/runtime/config-unix-64.h
+++ b/src/runtime/config-unix-64.h
@@ -74,8 +74,14 @@
#endif /* WANT_STDIO */
return -1;
}
- cfmakeraw(&new);
- if (tcsetattr(0, TCSANOW, &new)) {+ new = old;
+ new.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
+ | INLCR | IGNCR | ICRNL | IXON);
+ new.c_oflag &= ~OPOST;
+ new.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+ new.c_cflag &= ~(CSIZE | PARENB);
+ new.c_cflag |= CS8;
+ if (tcsetattr(0, TCSAFLUSH, &new)) {#if WANT_STDIO
fprintf(stderr, "tcsetattr 1 failed: errno=%d\n", errno);
#endif /* WANT_STDIO */
@@ -82,7 +88,7 @@
return -1;
}
r = read(0, &c, 1);
- if (tcsetattr(0, TCSANOW, &old)) {+ if (tcsetattr(0, TCSAFLUSH, &old)) {#if WANT_STDIO
fprintf(stderr, "tcsetattr 2 failed: errno=%d\n", errno);
#endif /* WANT_STDIO */
--
⑨