mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-15 18:18:05 -05:00

Not every "session" channel in SSH allocates a pty at all, of course, and so I'll need a way to run a subprocess without doing so. The simplest approach seems to be to expand uxpty's remit so that the pty is optional: now it can open either a pty or a set of pipes for stdin/out/err, according to an option provided to pty_backend_create. (It amuses me that without this option I'd have an SSH server which is incapable of _not_ honouring the "pty-req" channel request. That's normally the easy part!) This breaks the previous one-to-one coupling between pty backend instances and file descriptors passed to uxsel, which I was using to look up the Pty structure in a tree234 indexed by fd when an uxsel notification came back. So now each Pty structure contains a collection of subobjects of a new type PtyFd, and _those_ are what's stored in the fd-indexed tree. Another awkward part is that uxsel_set is not incremental: the rwx flags you pass to it completely supersede the previous set for that file descriptor, so I had to set up the logic that decides whether we're trying to read or write each fd in a way that can cope equally well with the fd aliasing another one (if it's the pty master) or not (if there are three completely separate pipes).