CLOEXEC support in fdopen, freopen, and mkostemp/mkostemps.

Change-Id: I74ea88e0d4973d6ab3c57da7d8bb643c31592b14
This commit is contained in:
Elliott Hughes
2014-09-23 17:34:29 -07:00
parent 87b6906f6e
commit 31165edf57
11 changed files with 145 additions and 41 deletions

View File

@@ -756,3 +756,43 @@ TEST(stdio, open_memstream_EINVAL) {
GTEST_LOG_(INFO) << "This test does nothing.\n";
#endif
}
TEST(stdio, fdopen_CLOEXEC) {
int fd = open("/proc/version", O_RDONLY);
ASSERT_TRUE(fd != -1);
// This fd doesn't have O_CLOEXEC...
int flags = fcntl(fd, F_GETFD);
ASSERT_TRUE(flags != -1);
ASSERT_EQ(0, flags & FD_CLOEXEC);
FILE* fp = fdopen(fd, "re");
ASSERT_TRUE(fp != NULL);
// ...but the new one does.
flags = fcntl(fileno(fp), F_GETFD);
ASSERT_TRUE(flags != -1);
ASSERT_EQ(FD_CLOEXEC, flags & FD_CLOEXEC);
fclose(fp);
close(fd);
}
TEST(stdio, freopen_CLOEXEC) {
FILE* fp = fopen("/proc/version", "r");
ASSERT_TRUE(fp != NULL);
// This FILE* doesn't have O_CLOEXEC...
int flags = fcntl(fileno(fp), F_GETFD);
ASSERT_TRUE(flags != -1);
ASSERT_EQ(0, flags & FD_CLOEXEC);
fp = freopen("/proc/version", "re", fp);
// ...but the new one does.
flags = fcntl(fileno(fp), F_GETFD);
ASSERT_TRUE(flags != -1);
ASSERT_EQ(FD_CLOEXEC, flags & FD_CLOEXEC);
fclose(fp);
}