shithub: MicroHs

Download patch

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 */
--