summaryrefslogtreecommitdiff
path: root/system/expect/linux-5.10-tty.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/expect/linux-5.10-tty.patch')
-rw-r--r--system/expect/linux-5.10-tty.patch25
1 files changed, 25 insertions, 0 deletions
diff --git a/system/expect/linux-5.10-tty.patch b/system/expect/linux-5.10-tty.patch
new file mode 100644
index 000000000..807f519b2
--- /dev/null
+++ b/system/expect/linux-5.10-tty.patch
@@ -0,0 +1,25 @@
+From: Adam Sampson <ats@offog.org>
+Subject: Re: dejagnu-1.6.3 test failure
+Message-ID: <YXNTBvEAQP0jAgiq@cartman.at.offog.org>
+
+After a bit of debugging, the cause seems to be that expect uses
+Tcl_GetsObj to read from stdin, and treats a -1 return value as an
+error. However, Tcl_GetsObj can also return -1 to indicate that input
+was blocked, i.e. it didn't manage to read a complete line -- expect
+didn't handle this case.
+
+This patch seems to fix the problem:
+
+--- expect5.45.4/exp_main_sub.c 2018-02-04 10:43:58.000000000 +0000
++++ expect5.45.4/exp_main_sub.c 2021-10-23 00:39:09.375404444 +0100
+@@ -326,7 +326,9 @@
+
+ if (code != EXP_EOF) {
+ inChannel = expStdinoutGet()->channel;
+- code = Tcl_GetsObj(inChannel, commandPtr);
++ do {
++ code = Tcl_GetsObj(inChannel, commandPtr);
++ } while (code < 0 && Tcl_InputBlocked(inChannel));
+ #ifdef SIMPLE_EVENT
+ if (code == -1 && errno == EINTR) {
+ if (Tcl_AsyncReady()) {