1*74989affSNico Weber // RUN: %clangxx -O0 -g %s -o %t && %run %t | FileCheck %s
2*74989affSNico Weber #include <assert.h>
3*74989affSNico Weber #include <stdio.h>
4*74989affSNico Weber #include <string.h>
5*74989affSNico Weber #include <time.h>
6*74989affSNico Weber #include <sys/timerfd.h>
7*74989affSNico Weber #include <unistd.h>
8*74989affSNico Weber
main(int argc,char ** argv)9*74989affSNico Weber int main (int argc, char** argv)
10*74989affSNico Weber {
11*74989affSNico Weber int fd = timerfd_create(CLOCK_REALTIME, 0);
12*74989affSNico Weber assert(fd >= 0);
13*74989affSNico Weber
14*74989affSNico Weber struct itimerspec its;
15*74989affSNico Weber its.it_value.tv_sec = 0;
16*74989affSNico Weber its.it_value.tv_nsec = 1000000;
17*74989affSNico Weber its.it_interval.tv_sec = its.it_value.tv_sec;
18*74989affSNico Weber its.it_interval.tv_nsec = its.it_value.tv_nsec;
19*74989affSNico Weber
20*74989affSNico Weber int res = timerfd_settime(fd, 0, &its, NULL);
21*74989affSNico Weber assert(res != -1);
22*74989affSNico Weber
23*74989affSNico Weber struct itimerspec its2;
24*74989affSNico Weber res = timerfd_settime(fd, 0, &its, &its2);
25*74989affSNico Weber assert(res != -1);
26*74989affSNico Weber assert(its2.it_interval.tv_sec == its.it_interval.tv_sec);
27*74989affSNico Weber assert(its2.it_interval.tv_nsec == its.it_interval.tv_nsec);
28*74989affSNico Weber assert(its2.it_value.tv_sec <= its.it_value.tv_sec);
29*74989affSNico Weber assert(its2.it_value.tv_nsec <= its.it_value.tv_nsec);
30*74989affSNico Weber
31*74989affSNico Weber struct itimerspec its3;
32*74989affSNico Weber res = timerfd_gettime(fd, &its3);
33*74989affSNico Weber assert(res != -1);
34*74989affSNico Weber assert(its3.it_interval.tv_sec == its.it_interval.tv_sec);
35*74989affSNico Weber assert(its3.it_interval.tv_nsec == its.it_interval.tv_nsec);
36*74989affSNico Weber assert(its3.it_value.tv_sec <= its.it_value.tv_sec);
37*74989affSNico Weber assert(its3.it_value.tv_nsec <= its.it_value.tv_nsec);
38*74989affSNico Weber
39*74989affSNico Weber
40*74989affSNico Weber unsigned long long buf;
41*74989affSNico Weber res = read(fd, &buf, sizeof(buf));
42*74989affSNico Weber assert(res == 8);
43*74989affSNico Weber assert(buf >= 1);
44*74989affSNico Weber
45*74989affSNico Weber res = close(fd);
46*74989affSNico Weber assert(res != -1);
47*74989affSNico Weber
48*74989affSNico Weber printf("DONE\n");
49*74989affSNico Weber // CHECK: DONE
50*74989affSNico Weber
51*74989affSNico Weber return 0;
52*74989affSNico Weber }
53