-/**
- * Test program for some Linux syscalls introduced during 2006 and 2007:
- * - epoll_pwait() was introduced in the 2.6.19 kernel, released in November
- * 2006.
- * - utimensat(), eventfd(), timerfd() and signalfd() were introduced in the
- * 2.6.22 kernel, released in July 2007.
- *
- * See also http://bugs.kde.org/show_bug.cgi?id=160907.
- */
-
-#define _GNU_SOURCE
-
-#include "../../config.h"
-#include <fcntl.h>
-#include <signal.h>
-#include <stdint.h>
-#if defined(HAVE_SYS_EPOLL_H)
-#include <sys/epoll.h>
-#endif
-#if defined(HAVE_SYS_EVENTFD_H)
-#include <sys/eventfd.h>
-#endif
-#if defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
-#if defined(HAVE_SYS_SIGNALFD_H)
-#include <sys/signalfd.h>
-#endif
-#include <sys/stat.h>
-#include <unistd.h>
-
-int main (void)
-{
-#if defined(HAVE_SIGNALFD) && defined(HAVE_EVENTFD) \
- && defined(HAVE_EVENTFD_READ) && defined(HAVE_PPOLL)
- {
- sigset_t mask;
- int fd, fd2;
- eventfd_t ev;
- struct timespec ts = { .tv_sec = 1, .tv_nsec = 0 };
- struct pollfd pfd[2];
-
- sigemptyset (&mask);
- sigaddset (&mask, SIGUSR1);
- fd = signalfd (-1, &mask, 0);
- sigaddset (&mask, SIGUSR2);
- fd = signalfd (fd, &mask, 0);
- fd2 = eventfd (5, 0);
- eventfd_read (fd2, &ev);
- pfd[0].fd = fd;
- pfd[0].events = POLLIN|POLLOUT;
- pfd[1].fd = fd2;
- pfd[1].events = POLLIN|POLLOUT;
- ppoll (pfd, 2, &ts, &mask);
- }
-#endif
-
-#if defined(HAVE_UTIMENSAT)
- unlink("/tmp/valgrind-utimensat-test");
- close (creat ("/tmp/valgrind-utimensat-test", S_IRUSR | S_IWUSR));
- {
- struct timespec ts2[2] = { [0].tv_sec = 10000000, [1].tv_sec = 20000000 };
- utimensat (AT_FDCWD, "/tmp/valgrind-utimensat-test", ts2, 0);
- }
- unlink("/tmp/valgrind-utimensat-test");
-#endif
-
-#if defined(HAVE_EPOLL_CREATE) && defined(HAVE_EPOLL_PWAIT)
- {
- int fd3;
- struct epoll_event evs[10];
- sigset_t mask;
-
- sigemptyset (&mask);
- sigaddset (&mask, SIGUSR1);
- sigaddset (&mask, SIGUSR2);
- fd3 = epoll_create (10);
- epoll_pwait (fd3, evs, 10, 0, &mask);
- }
-#endif
-
- return 0;
-}