/** * 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; }