From 2ee39c5fb3a0cdc5da5026e78718ac7d92ea48c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Date: Thu, 14 May 2026 14:05:14 +0200 Subject: [PATCH] selftests/nolibc: test open mode handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a selftest for the new O_TMPFILE open mode handling. While O_CREAT or openat() are not tested, the code is the same, so assume these also work. Signed-off-by: Thomas Weißschuh Acked-by: Willy Tarreau Link: https://patch.msgid.link/20260514-nolibc-open-tmpfile-v2-4-b4c6c5efa266@weissschuh.net --- tools/testing/selftests/nolibc/nolibc-test.c | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c index 1db6e8d55c16..c3867cc570c6 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -1305,6 +1305,28 @@ int test_openat(void) return 0; } +int test_open_mode(void) +{ + const mode_t mode = 0444; + struct stat stat_buf; + int fd, ret; + + fd = open("/tmp", O_TMPFILE | O_RDWR, mode); + if (fd == -1) + return -1; + + ret = fstat(fd, &stat_buf); + close(fd); + + if (ret == -1) + return -1; + + if ((stat_buf.st_mode & 0777) != mode) + return -1; + + return 0; +} + int test_nolibc_enosys(void) { if (true) @@ -1540,6 +1562,7 @@ int run_syscall(int min, int max) CASE_TEST(open_tty); EXPECT_SYSNE(1, tmp = open("/dev/null", O_RDONLY), -1); if (tmp != -1) close(tmp); break; CASE_TEST(open_blah); EXPECT_SYSER(1, tmp = open("/proc/self/blah", O_RDONLY), -1, ENOENT); if (tmp != -1) close(tmp); break; CASE_TEST(openat_dir); EXPECT_SYSZR(1, test_openat()); break; + CASE_TEST(open_mode); EXPECT_SYSZR(1, test_open_mode()); break; CASE_TEST(pipe); EXPECT_SYSZR(1, test_pipe()); break; CASE_TEST(poll_null); EXPECT_SYSZR(1, poll(NULL, 0, 0)); break; CASE_TEST(poll_stdout); EXPECT_SYSNE(1, ({ struct pollfd fds = { 1, POLLOUT, 0}; poll(&fds, 1, 0); }), -1); break;