xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/android/cloexec-epoll-create1.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s android-cloexec-epoll-create1 %t
2*89a1d03eSRichard 
3*89a1d03eSRichard #define __O_CLOEXEC 3
4*89a1d03eSRichard #define EPOLL_CLOEXEC __O_CLOEXEC
5*89a1d03eSRichard #define TEMP_FAILURE_RETRY(exp) \
6*89a1d03eSRichard   ({                            \
7*89a1d03eSRichard     int _rc;                    \
8*89a1d03eSRichard     do {                        \
9*89a1d03eSRichard       _rc = (exp);              \
10*89a1d03eSRichard     } while (_rc == -1);        \
11*89a1d03eSRichard   })
12*89a1d03eSRichard 
13*89a1d03eSRichard extern "C" int epoll_create1(int flags);
14*89a1d03eSRichard 
a()15*89a1d03eSRichard void a() {
16*89a1d03eSRichard   epoll_create1(0);
17*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'epoll_create1' should use EPOLL_CLOEXEC where possible [android-cloexec-epoll-create1]
18*89a1d03eSRichard   // CHECK-FIXES: epoll_create1(EPOLL_CLOEXEC);
19*89a1d03eSRichard   TEMP_FAILURE_RETRY(epoll_create1(0));
20*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'epoll_create1'
21*89a1d03eSRichard   // CHECK-FIXES: TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC));
22*89a1d03eSRichard }
23*89a1d03eSRichard 
f()24*89a1d03eSRichard void f() {
25*89a1d03eSRichard   epoll_create1(3);
26*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'epoll_create1'
27*89a1d03eSRichard   // CHECK-FIXES: epoll_create1(EPOLL_CLOEXEC);
28*89a1d03eSRichard   TEMP_FAILURE_RETRY(epoll_create1(3));
29*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'epoll_create1'
30*89a1d03eSRichard   // CHECK-FIXES: TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC));
31*89a1d03eSRichard 
32*89a1d03eSRichard   int flag = 0;
33*89a1d03eSRichard   epoll_create1(EPOLL_CLOEXEC);
34*89a1d03eSRichard   TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC));
35*89a1d03eSRichard }
36*89a1d03eSRichard 
37*89a1d03eSRichard namespace i {
38*89a1d03eSRichard int epoll_create1(int flags);
39*89a1d03eSRichard 
d()40*89a1d03eSRichard void d() {
41*89a1d03eSRichard   epoll_create1(0);
42*89a1d03eSRichard   TEMP_FAILURE_RETRY(epoll_create1(0));
43*89a1d03eSRichard }
44*89a1d03eSRichard 
45*89a1d03eSRichard } // namespace i
46*89a1d03eSRichard 
e()47*89a1d03eSRichard void e() {
48*89a1d03eSRichard   epoll_create1(EPOLL_CLOEXEC);
49*89a1d03eSRichard   TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC));
50*89a1d03eSRichard }
51*89a1d03eSRichard 
52*89a1d03eSRichard class G {
53*89a1d03eSRichard public:
54*89a1d03eSRichard   int epoll_create1(int flags);
d()55*89a1d03eSRichard   void d() {
56*89a1d03eSRichard     epoll_create1(EPOLL_CLOEXEC);
57*89a1d03eSRichard     TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC));
58*89a1d03eSRichard   }
59*89a1d03eSRichard };
60