You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed
On Unix, a program that exists but cannot be executed now fails TerminalBuilder::spawn with an Error::Spawn that says why, and termlens inspect exits 2 with that message (#563). Typical causes are a
missing #! interpreter, an interpreter that is not a program, a missing
dynamic loader, and an argument list over the kernel's limit. The message
names the interpreter, with any \r that CRLF line endings left on it
shown escaped. spawn used to return Ok with a child already killed by
SIGABRT (fatal runtime error: assertion failed: output.write(&bytes).is_ok()), which inspect showed as exited: killed by signal: Aborted. portable-pty closed the pipe std reports a failed
exec through, so on Unix termlens now starts the child itself. Program
resolution, the environment, the session and the signals are unchanged,
and the child still inherits no descriptor besides its terminal. A
working directory the child cannot enter is now named in the error. A
few rare setups are still left to portable-pty, as before, and docs/DESIGN.md lists them.
The second writer termlens opens on the PTY master is close-on-exec. A
process the test started while a terminal was alive inherited it before,
which kept the master open in a process unrelated to the terminal.
With TERM set twice through .env, XTGETTCAP's TN reply reports the
later value, the one the child gets. It reported the first, so an
application could get two answers to "which terminal is this?".