Module Name: src
Committed By: jruoho
Date: Wed Jun 1 03:39:45 UTC 2011
Modified Files:
src/tests/syscall: t_pollts.c
Log Message:
Check also basic EFAULT and EINVAL from bogus calls to pollts(2).
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/syscall/t_pollts.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/syscall/t_pollts.c
diff -u src/tests/syscall/t_pollts.c:1.2 src/tests/syscall/t_pollts.c:1.3
--- src/tests/syscall/t_pollts.c:1.2 Sun May 29 12:57:14 2011
+++ src/tests/syscall/t_pollts.c Wed Jun 1 03:39:45 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: t_pollts.c,v 1.2 2011/05/29 12:57:14 tron Exp $ */
+/* $NetBSD: t_pollts.c,v 1.3 2011/06/01 03:39:45 jruoho Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -31,6 +31,7 @@
#include <sys/time.h>
+#include <errno.h>
#include <fcntl.h>
#include <paths.h>
#include <poll.h>
@@ -39,23 +40,15 @@
#include <atf-c.h>
-ATF_TC(pollts);
-ATF_TC_HEAD(pollts, tc)
+ATF_TC(pollts_basic);
+ATF_TC_HEAD(pollts_basic, tc)
{
atf_tc_set_md_var(tc, "timeout", "10");
atf_tc_set_md_var(tc, "descr",
"Basis functionality test for pollts(2)");
}
-ATF_TC(pollts_sigmask);
-ATF_TC_HEAD(pollts_sigmask, tc)
-{
- atf_tc_set_md_var(tc, "timeout", "10");
- atf_tc_set_md_var(tc, "descr",
- "Check that pollts_sigmask(2) restores the signal mask");
-}
-
-ATF_TC_BODY(pollts, tc)
+ATF_TC_BODY(pollts_basic, tc)
{
int fds[2];
struct pollfd pfds[2];
@@ -119,6 +112,42 @@
ATF_REQUIRE_EQ(close(fds[1]), 0);
}
+ATF_TC(pollts_err);
+ATF_TC_HEAD(pollts_err, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check errors from pollts(2)");
+}
+
+ATF_TC_BODY(pollts_err, tc)
+{
+ struct timespec timeout;
+ struct pollfd pfd;
+ int fd = 0;
+
+ pfd.fd = fd;
+ pfd.events = POLLIN;
+
+ timeout.tv_sec = 1;
+ timeout.tv_nsec = 0;
+
+ errno = 0;
+ ATF_REQUIRE_ERRNO(EFAULT, pollts((void *)-1, 1, &timeout, NULL) != 0);
+
+ timeout.tv_sec = -1;
+ timeout.tv_nsec = -1;
+
+ errno = 0;
+ ATF_REQUIRE_ERRNO(EINVAL, pollts(&pfd, 1, &timeout, NULL) != 0);
+}
+
+ATF_TC(pollts_sigmask);
+ATF_TC_HEAD(pollts_sigmask, tc)
+{
+ atf_tc_set_md_var(tc, "timeout", "10");
+ atf_tc_set_md_var(tc, "descr",
+ "Check that pollts(2) restores the signal mask");
+}
+
ATF_TC_BODY(pollts_sigmask, tc)
{
int fd;
@@ -143,7 +172,7 @@
ATF_REQUIRE_EQ(sigfillset(&mask), 0);
ATF_REQUIRE_EQ(sigprocmask(SIG_UNBLOCK, &mask, NULL), 0);
- /*
+ /*
* Check that pollts(2) immediately returns. We block *all*
* signals during pollts(2).
*/
@@ -160,7 +189,9 @@
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, pollts);
+
+ ATF_TP_ADD_TC(tp, pollts_basic);
+ ATF_TP_ADD_TC(tp, pollts_err);
ATF_TP_ADD_TC(tp, pollts_sigmask);
return atf_no_error();