xref: /llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/timerfd.cpp (revision 74989aff5351beaeb03f46fc2fe57752d57f848b)
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