mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
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.org Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
820a185896
commit
d0fe8920cb
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user