Make all popen(3) file descriptors O_CLOEXEC.
POSIX says "The popen() function shall ensure that any streams from previous popen() calls that remain open in the parent process are closed in the new child process". It doesn't appear to disallow all popen(3) file descriptors from being O_CLOEXEC, and it's not obvious why anyone would want them inherited. Let's see if we can make the stricter guarantee... Bug: N/A Test: ran tests Change-Id: I2c85170d730b211637afb8ba10df150ca3237262
This commit is contained in:
parent
b0c8a01de1
commit
9b6fefd89b
1 changed files with 0 additions and 4 deletions
|
@ -1178,8 +1178,6 @@ static FILE* __popen_fail(int fds[2]) {
|
|||
}
|
||||
|
||||
FILE* popen(const char* cmd, const char* mode) {
|
||||
bool close_on_exec = (strchr(mode, 'e') != nullptr);
|
||||
|
||||
// Was the request for a socketpair or just a pipe?
|
||||
int fds[2];
|
||||
bool bidirectional = false;
|
||||
|
@ -1231,8 +1229,6 @@ FILE* popen(const char* cmd, const char* mode) {
|
|||
FILE* fp = fdopen(fds[parent], mode);
|
||||
if (fp == nullptr) return __popen_fail(fds);
|
||||
|
||||
// The caller didn't ask for their pipe to be O_CLOEXEC, so flip it back now the child has forked.
|
||||
if (!close_on_exec) fcntl(fds[parent], F_SETFD, 0);
|
||||
close(fds[child]);
|
||||
|
||||
_EXT(fp)->_popen_pid = pid;
|
||||
|
|
Loading…
Reference in a new issue