Skip to content

Commit 86f4811

Browse files
committed
Pass a struct flock into fcntl F_OFD_GETLK.
1 parent 40a8a2b commit 86f4811

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

libc/test/src/fcntl/fcntl_test.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,19 @@ class LibcFcntlCommonLockTests : public LlvmLibcFcntlTest {
172172
int fd =
173173
LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
174174
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
175-
ASSERT_EQ(-1, LIBC_NAMESPACE::fcntl(fd, GETLK_CMD));
175+
176+
struct flock flk = {};
177+
flk.l_type = F_RDLCK;
178+
flk.l_start = 0;
179+
flk.l_whence = SEEK_SET;
180+
flk.l_len = 50;
181+
ASSERT_EQ(-1, LIBC_NAMESPACE::fcntl(fd, GETLK_CMD, &flk));
176182
ASSERT_ERRNO_EQ(EBADF);
177183
}
178184
};
179185

180-
#define COMMON_LOCK_TESTS(NAME, GETLK, SETLK) \
181-
using NAME = LibcFcntlCommonLockTests<GETLK, SETLK>; \
186+
#define COMMON_LOCK_TESTS(NAME, GETLK_CMD, SETLK_CMD) \
187+
using NAME = LibcFcntlCommonLockTests<GETLK_CMD, GETLK_CMD>; \
182188
TEST_F(NAME, GetLkRead) { GetLkRead(); } \
183189
TEST_F(NAME, GetLkWrite) { GetLkWrite(); } \
184190
TEST_F(NAME, UseAfterClose) { UseAfterClose(); } \
@@ -188,6 +194,16 @@ COMMON_LOCK_TESTS(LlvmLibcFcntlProcessAssociatedLockTest, F_GETLK, F_SETLK);
188194
COMMON_LOCK_TESTS(LlvmLibcFcntlOpenFileDescriptionLockTest, F_OFD_GETLK,
189195
F_OFD_SETLK);
190196

197+
TEST_F(LlvmLibcFcntlTest, UseAfterClose) {
198+
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
199+
constexpr const char *TEST_FILE_NAME = "testdata/fcntl_use_after_close.test";
200+
auto TEST_FILE = libc_make_test_file_path(TEST_FILE_NAME);
201+
int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
202+
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
203+
ASSERT_EQ(-1, LIBC_NAMESPACE::fcntl(fd, F_GETFL));
204+
ASSERT_ERRNO_EQ(EBADF);
205+
}
206+
191207
TEST_F(LlvmLibcFcntlTest, SetGetOwnerTest) {
192208
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
193209
pid_t pid = LIBC_NAMESPACE::getpid();

0 commit comments

Comments
 (0)