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