diff options
author | Mark Johnston <markj@FreeBSD.org> | 2024-11-19 21:03:14 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2024-11-19 21:03:14 +0000 |
commit | 4ff291ebe80a226295351936d99fc6e3e7fce48a (patch) | |
tree | fb7c602ce6b2b44a269eec37b1624f41565e0950 /contrib/netbsd-tests/lib/libc/sys | |
parent | 9ab59e900c1dd693b4d14285389a035e81341789 (diff) |
Diffstat (limited to 'contrib/netbsd-tests/lib/libc/sys')
-rw-r--r-- | contrib/netbsd-tests/lib/libc/sys/t_access.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_access.c b/contrib/netbsd-tests/lib/libc/sys/t_access.c index b37643c57d7d..f973aba3fb4a 100644 --- a/contrib/netbsd-tests/lib/libc/sys/t_access.c +++ b/contrib/netbsd-tests/lib/libc/sys/t_access.c @@ -38,11 +38,13 @@ __RCSID("$NetBSD: t_access.c,v 1.2 2017/01/10 22:36:29 christos Exp $"); #include <atf-c.h> #include <sys/stat.h> +#include <sys/sysctl.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdint.h> +#include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -176,6 +178,38 @@ ATF_TC_BODY(access_notexist, tc) } } +ATF_TC(access_text); +ATF_TC_HEAD(access_text, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test access(2) for ETXTBSY"); +} + +ATF_TC_BODY(access_text, tc) +{ + char path[PATH_MAX]; + size_t sz; + int fd, name[4]; + + name[0] = CTL_KERN; + name[1] = KERN_PROC; + name[2] = KERN_PROC_PATHNAME; + name[3] = -1; + + sz = sizeof(path); + ATF_REQUIRE(sysctl(name, 4, path, &sz, NULL, 0) == 0); + + fd = open(path, O_RDONLY); + ATF_REQUIRE(fd >= 0); + + ATF_REQUIRE(access(path, W_OK) != 0); + ATF_REQUIRE(errno == ETXTBSY); + + ATF_REQUIRE(faccessat(AT_FDCWD, path, W_OK, 0) != 0); + ATF_REQUIRE(errno == ETXTBSY); + + ATF_REQUIRE(close(fd) == 0); +} + ATF_TC(access_toolong); ATF_TC_HEAD(access_toolong, tc) { @@ -214,6 +248,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, access_inval); ATF_TP_ADD_TC(tp, access_notdir); ATF_TP_ADD_TC(tp, access_notexist); + ATF_TP_ADD_TC(tp, access_text); ATF_TP_ADD_TC(tp, access_toolong); return atf_no_error(); |