• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Test program for some Linux syscalls introduced during 2006 and 2007:
3  * - epoll_pwait() was introduced in the 2.6.19 kernel, released in November
4  *     2006.
5  * - utimensat(), eventfd(), timerfd() and signalfd() were introduced in the
6  *     2.6.22 kernel, released in July 2007.
7  *
8  * See also http://bugs.kde.org/show_bug.cgi?id=160907.
9  */
10 
11 #define _GNU_SOURCE
12 
13 #include "../../config.h"
14 #include <fcntl.h>
15 #include <signal.h>
16 #include <stdint.h>
17 #if defined(HAVE_SYS_EPOLL_H)
18 #include <sys/epoll.h>
19 #endif
20 #if defined(HAVE_SYS_EVENTFD_H)
21 #include <sys/eventfd.h>
22 #endif
23 #if defined(HAVE_SYS_POLL_H)
24 #include <sys/poll.h>
25 #endif
26 #if defined(HAVE_SYS_SIGNALFD_H)
27 #include <sys/signalfd.h>
28 #endif
29 #include <sys/stat.h>
30 #include <unistd.h>
31 
main(void)32 int main (void)
33 {
34 #if defined(HAVE_SIGNALFD) && defined(HAVE_EVENTFD) \
35     && defined(HAVE_EVENTFD_READ) && defined(HAVE_PPOLL)
36   {
37     sigset_t mask;
38     int fd, fd2;
39     eventfd_t ev;
40     struct timespec ts = { .tv_sec = 1, .tv_nsec = 0 };
41     struct pollfd pfd[2];
42 
43     sigemptyset (&mask);
44     sigaddset (&mask, SIGUSR1);
45     fd = signalfd (-1, &mask, 0);
46     sigaddset (&mask, SIGUSR2);
47     fd = signalfd (fd, &mask, 0);
48     fd2 = eventfd (5, 0);
49     eventfd_read (fd2, &ev);
50     pfd[0].fd = fd;
51     pfd[0].events = POLLIN|POLLOUT;
52     pfd[1].fd = fd2;
53     pfd[1].events = POLLIN|POLLOUT;
54     ppoll (pfd, 2, &ts, &mask);
55   }
56 #endif
57 
58 #if defined(HAVE_UTIMENSAT)
59   unlink("/tmp/valgrind-utimensat-test");
60   close (creat ("/tmp/valgrind-utimensat-test", S_IRUSR | S_IWUSR));
61   {
62     struct timespec ts2[2] = { [0].tv_sec = 10000000, [1].tv_sec = 20000000 };
63     utimensat (AT_FDCWD, "/tmp/valgrind-utimensat-test", ts2, 0);
64   }
65   unlink("/tmp/valgrind-utimensat-test");
66 #endif
67 
68 #if defined(HAVE_EPOLL_CREATE) && defined(HAVE_EPOLL_PWAIT)
69   {
70     int fd3;
71     struct epoll_event evs[10];
72     sigset_t mask;
73 
74     sigemptyset (&mask);
75     sigaddset (&mask, SIGUSR1);
76     sigaddset (&mask, SIGUSR2);
77     fd3 = epoll_create (10);
78     epoll_pwait (fd3, evs, 10, 0, &mask);
79   }
80 #endif
81 
82   return 0;
83 }
84