10 #include "clang/AST/ASTContext.h"
11 #include "clang/ASTMatchers/ASTMatchFinder.h"
19 void CloexecAcceptCheck::registerMatchers(MatchFinder *Finder) {
20 auto SockAddrPointerType =
21 hasType(pointsTo(recordDecl(isStruct(), hasName(
"sockaddr"))));
22 auto SockLenPointerType = hasType(pointsTo(namedDecl(hasName(
"socklen_t"))));
24 registerMatchersImpl(Finder,
25 functionDecl(returns(isInteger()), hasName(
"accept"),
26 hasParameter(0, hasType(isInteger())),
27 hasParameter(1, SockAddrPointerType),
28 hasParameter(2, SockLenPointerType)));
32 std::string ReplacementText =
33 (Twine(
"accept4(") + getSpellingArg(Result, 0) +
", " +
34 getSpellingArg(Result, 1) +
", " + getSpellingArg(Result, 2) +
40 "prefer accept4() to accept() because accept4() allows SOCK_CLOEXEC",