fix a problem that the standard streams are unexpectedly closed - st - simple t… | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 1d3142da968da7f6f61f1c1708f39ca233eda150 | |
parent 2ec571a30c0c3b1a17f6b3631c80d573582f59a1 | |
Author: Koichi Murase <[email protected]> | |
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(-) | |
--- | |
diff --git a/st.c b/st.c | |
@@ -793,14 +793,15 @@ ttynew(const char *line, char *cmd, const char *out, char… | |
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"); |