URI: 
       fix a problem that the standard streams are unexpectedly closed - st - simple terminal
  HTML git clone https://git.parazyd.org/st
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 1d3142da968da7f6f61f1c1708f39ca233eda150
   DIR parent 2ec571a30c0c3b1a17f6b3631c80d573582f59a1
  HTML Author: Koichi Murase <myoga.murase@gmail.com>
       Date:   Tue, 24 Aug 2021 06:25:05 +0900
       
       fix a problem that the standard streams are unexpectedly closed
       
       In the current implementation, the slave PTY (assigned to the variable
       `s') is always closed after duplicating it to file descriptors of
       standard streams (0, 1, and 2).  However, when the allocated slave PTY
       `s' is already one of 0, 1, or 2, this causes unexpected closing of a
       standard stream.  The same problem occurs when the file descriptor of
       the master PTY (the variable `m') is one of 0, 1, or 2.
       
       In this patch, the original master PTY (m) is closed before it would
       be overwritten by duplicated slave PTYs.  The original slave PTY (s)
       is closed only when it is not one of the stanrad streams.
       
       Diffstat:
         M st.c                                |       5 +++--
       
       1 file changed, 3 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/st.c b/st.c
       @@ -793,14 +793,15 @@ ttynew(const char *line, char *cmd, const char *out, char **args)
                        break;
                case 0:
                        close(iofd);
       +                close(m);
                        setsid(); /* create a new process group */
                        dup2(s, 0);
                        dup2(s, 1);
                        dup2(s, 2);
                        if (ioctl(s, TIOCSCTTY, NULL) < 0)
                                die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));
       -                close(s);
       -                close(m);
       +                if (s > 2)
       +                        close(s);
        #ifdef __OpenBSD__
                        if (pledge("stdio getpw proc exec", NULL) == -1)
                                die("pledge\n");