Commit d0fe8920 authored by Christian Brauner's avatar Christian Brauner

selftests: add F_CREATED_QUERY tests

Add simple selftests for fcntl(fd, F_CREATED_QUERY, 0).

Link: https://lore.kernel.org/r/20240724-work-fcntl-v1-2-e8153a2f1991@kernel.orgSigned-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 820a1858
......@@ -26,6 +26,10 @@
#define F_DUPFD_QUERY (F_LINUX_SPECIFIC_BASE + 3)
#endif
#ifndef F_CREATED_QUERY
#define F_CREATED_QUERY (F_LINUX_SPECIFIC_BASE + 4)
#endif
static inline int sys_close_range(unsigned int fd, unsigned int max_fd,
unsigned int flags)
{
......@@ -624,4 +628,39 @@ TEST(close_range_bitmap_corruption)
EXPECT_EQ(0, WEXITSTATUS(status));
}
TEST(fcntl_created)
{
for (int i = 0; i < 101; i++) {
int fd;
char path[PATH_MAX];
fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0) {
if (errno == ENOENT)
SKIP(return,
"Skipping test since /dev/null does not exist");
}
/* We didn't create "/dev/null". */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 0);
close(fd);
sprintf(path, "aaaa_%d", i);
fd = open(path, O_CREAT | O_RDONLY | O_CLOEXEC, 0600);
ASSERT_GE(fd, 0);
/* We created "aaaa_%d". */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 1);
close(fd);
fd = open(path, O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0);
/* We're opening it again, so no positive creation check. */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 0);
close(fd);
unlink(path);
}
}
TEST_HARNESS_MAIN
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment