xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/android/cloexec-dup.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s android-cloexec-dup %t
2*89a1d03eSRichard 
3*89a1d03eSRichard extern "C" int dup(int oldfd);
f()4*89a1d03eSRichard void f() {
5*89a1d03eSRichard   dup(1);
6*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: prefer fcntl() to dup() because fcntl() allows F_DUPFD_CLOEXEC [android-cloexec-dup]
7*89a1d03eSRichard   // CHECK-FIXES: fcntl(1, F_DUPFD_CLOEXEC);
8*89a1d03eSRichard   int oldfd = 0;
9*89a1d03eSRichard   dup(oldfd);
10*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: prefer
11*89a1d03eSRichard   // CHECK-FIXES: fcntl(oldfd, F_DUPFD_CLOEXEC);
12*89a1d03eSRichard }
13*89a1d03eSRichard 
14*89a1d03eSRichard namespace i {
15*89a1d03eSRichard int dup(int oldfd);
g()16*89a1d03eSRichard void g() {
17*89a1d03eSRichard   dup(0);
18*89a1d03eSRichard   int oldfd = 1;
19*89a1d03eSRichard   dup(oldfd);
20*89a1d03eSRichard }
21*89a1d03eSRichard } // namespace i
22*89a1d03eSRichard 
23*89a1d03eSRichard class C {
24*89a1d03eSRichard public:
25*89a1d03eSRichard   int dup(int oldfd);
h()26*89a1d03eSRichard   void h() {
27*89a1d03eSRichard     dup(0);
28*89a1d03eSRichard     int oldfd = 1;
29*89a1d03eSRichard     dup(oldfd);
30*89a1d03eSRichard   }
31*89a1d03eSRichard };
32