xref: /llvm-project/clang-tools-extra/clang-tidy/android/CloexecDupCheck.cpp (revision 7d2ea6c422d3f5712b7253407005e1a465a76946)
156650e7fSChih-Hung Hsieh //===--- CloexecDupCheck.cpp - clang-tidy----------------------------------===//
256650e7fSChih-Hung Hsieh //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
656650e7fSChih-Hung Hsieh //
756650e7fSChih-Hung Hsieh //===----------------------------------------------------------------------===//
856650e7fSChih-Hung Hsieh 
956650e7fSChih-Hung Hsieh #include "CloexecDupCheck.h"
1056650e7fSChih-Hung Hsieh #include "clang/AST/ASTContext.h"
1156650e7fSChih-Hung Hsieh #include "clang/ASTMatchers/ASTMatchFinder.h"
1256650e7fSChih-Hung Hsieh 
1356650e7fSChih-Hung Hsieh using namespace clang::ast_matchers;
1456650e7fSChih-Hung Hsieh 
15*7d2ea6c4SCarlos Galvez namespace clang::tidy::android {
1656650e7fSChih-Hung Hsieh 
registerMatchers(MatchFinder * Finder)1756650e7fSChih-Hung Hsieh void CloexecDupCheck::registerMatchers(MatchFinder *Finder) {
1856650e7fSChih-Hung Hsieh   registerMatchersImpl(Finder,
1956650e7fSChih-Hung Hsieh                        functionDecl(returns(isInteger()), hasName("dup"),
2056650e7fSChih-Hung Hsieh                                     hasParameter(0, hasType(isInteger()))));
2156650e7fSChih-Hung Hsieh }
2256650e7fSChih-Hung Hsieh 
check(const MatchFinder::MatchResult & Result)2356650e7fSChih-Hung Hsieh void CloexecDupCheck::check(const MatchFinder::MatchResult &Result) {
243d68a38bSGeorge Burgess IV   std::string ReplacementText =
2556650e7fSChih-Hung Hsieh       (Twine("fcntl(") + getSpellingArg(Result, 0) + ", F_DUPFD_CLOEXEC)")
2656650e7fSChih-Hung Hsieh           .str();
2756650e7fSChih-Hung Hsieh 
2856650e7fSChih-Hung Hsieh   replaceFunc(Result,
2956650e7fSChih-Hung Hsieh               "prefer fcntl() to dup() because fcntl() allows F_DUPFD_CLOEXEC",
3056650e7fSChih-Hung Hsieh               ReplacementText);
3156650e7fSChih-Hung Hsieh }
3256650e7fSChih-Hung Hsieh 
33*7d2ea6c4SCarlos Galvez } // namespace clang::tidy::android
34