libstdc++: Use close-on-exec for file descriptors in filesystem::copy_file
libstdc++-v3/ChangeLog: * src/filesystem/ops-common.h (do_copy_file) [O_CLOEXEC]: Set close-on-exec flag on file descriptors. (cherry picked from commit 7e8e071c4b64f1b6ea5ddf528724fc793a0f0e36)
This commit is contained in:
@@ -457,25 +457,26 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
|
||||
int fd;
|
||||
};
|
||||
|
||||
int iflag = O_RDONLY;
|
||||
int common_flags = 0;
|
||||
#ifdef O_CLOEXEC
|
||||
common_flags |= O_CLOEXEC;
|
||||
#endif
|
||||
#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
|
||||
iflag |= O_BINARY;
|
||||
common_flags |= O_BINARY;
|
||||
#endif
|
||||
|
||||
const int iflag = O_RDONLY | common_flags;
|
||||
CloseFD in = { posix::open(from, iflag) };
|
||||
if (in.fd == -1)
|
||||
{
|
||||
ec.assign(errno, std::generic_category());
|
||||
return false;
|
||||
}
|
||||
int oflag = O_WRONLY|O_CREAT;
|
||||
int oflag = O_WRONLY | O_CREAT | common_flags;
|
||||
if (options.overwrite || options.update)
|
||||
oflag |= O_TRUNC;
|
||||
else
|
||||
oflag |= O_EXCL;
|
||||
#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
|
||||
oflag |= O_BINARY;
|
||||
#endif
|
||||
CloseFD out = { posix::open(to, oflag, S_IWUSR) };
|
||||
if (out.fd == -1)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user