clang-tools  6.0.0svn
Public Member Functions | Protected Member Functions | Static Protected Attributes | List of all members
clang::tidy::android::CloexecCheck Class Reference

The base class for all close-on-exec checks in Android module. More...

#include <CloexecCheck.h>

Inheritance diagram for clang::tidy::android::CloexecCheck:
Inheritance graph
[legend]
Collaboration diagram for clang::tidy::android::CloexecCheck:
Collaboration graph
[legend]

Public Member Functions

 CloexecCheck (StringRef Name, ClangTidyContext *Context)
 
- Public Member Functions inherited from clang::tidy::ClangTidyCheck
 ClangTidyCheck (StringRef CheckName, ClangTidyContext *Context)
 Initializes the check with CheckName and Context. More...
 
virtual void registerPPCallbacks (CompilerInstance &Compiler)
 Override this to register PPCallbacks with Compiler. More...
 
virtual void registerMatchers (ast_matchers::MatchFinder *Finder)
 Override this to register AST matchers with Finder. More...
 
virtual void check (const ast_matchers::MatchFinder::MatchResult &Result)
 ClangTidyChecks that register ASTMatchers should do the actual work in here. More...
 
DiagnosticBuilder diag (SourceLocation Loc, StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
 Add a diagnostic with the check's name. More...
 
virtual void storeOptions (ClangTidyOptions::OptionMap &Options)
 Should store all options supported by this check with their current values or default values for options that haven't been overridden. More...
 

Protected Member Functions

void registerMatchersImpl (ast_matchers::MatchFinder *Finder, ast_matchers::internal::Matcher< FunctionDecl > Function)
 
void insertMacroFlag (const ast_matchers::MatchFinder::MatchResult &Result, StringRef MacroFlag, int ArgPos)
 Currently, we have three types of fixes. More...
 
void replaceFunc (const ast_matchers::MatchFinder::MatchResult &Result, StringRef WarningMsg, StringRef FixMsg)
 Type2 is to replace the API to another function that has required the ability. More...
 
void insertStringFlag (const ast_matchers::MatchFinder::MatchResult &Result, const char Mode, const int ArgPos)
 Type3 is also to add a flag to the corresponding argument, but this time, the flag is some string and each char represents a mode rather than a macro. More...
 
StringRef getSpellingArg (const ast_matchers::MatchFinder::MatchResult &Result, int N) const
 Helper function to get the spelling of a particular argument. More...
 
- Protected Member Functions inherited from clang::tidy::ClangTidyCheck
StringRef getCurrentMainFile () const
 Returns the main file name of the current translation unit. More...
 
LangOptions getLangOpts () const
 Returns the language options from the context. More...
 

Static Protected Attributes

static const char * FuncDeclBindingStr = "funcDecl"
 Binding name of the FuncDecl of a function call. More...
 
static const char * FuncBindingStr ="func"
 Binding name of the function call expression. More...
 

Additional Inherited Members

- Protected Attributes inherited from clang::tidy::ClangTidyCheck
OptionsView Options
 

Detailed Description

The base class for all close-on-exec checks in Android module.

To be specific, there are some functions that need the close-on-exec flag to prevent the file descriptor leakage on fork+exec and this class provides utilities to identify and fix these C functions.

Definition at line 29 of file CloexecCheck.h.

Constructor & Destructor Documentation

◆ CloexecCheck()

clang::tidy::android::CloexecCheck::CloexecCheck ( StringRef  Name,
ClangTidyContext Context 
)
inline

Definition at line 31 of file CloexecCheck.h.

References registerMatchersImpl().

Member Function Documentation

◆ getSpellingArg()

StringRef clang::tidy::android::CloexecCheck::getSpellingArg ( const ast_matchers::MatchFinder::MatchResult &  Result,
int  N 
) const
protected

Helper function to get the spelling of a particular argument.

Definition at line 103 of file CloexecCheck.cpp.

◆ insertMacroFlag()

void clang::tidy::android::CloexecCheck::insertMacroFlag ( const ast_matchers::MatchFinder::MatchResult &  Result,
StringRef  MacroFlag,
int  ArgPos 
)
protected

Currently, we have three types of fixes.

Type1 is to insert the necessary macro flag in the flag argument. For example, 'O_CLOEXEC' is required in function 'open()', so

open(file, O_RDONLY);

should be

open(file, O_RDONLY | O_CLOEXE);
Parameters
[out]ResultMatchResult from AST matcher.
MacroFlagThe macro name of the flag.
ArgPosThe 0-based position of the flag argument.

Definition at line 54 of file CloexecCheck.cpp.

References clang::tidy::utils::exprHasBitFlagWithSpelling().

◆ insertStringFlag()

void clang::tidy::android::CloexecCheck::insertStringFlag ( const ast_matchers::MatchFinder::MatchResult &  Result,
const char  Mode,
const int  ArgPos 
)
protected

Type3 is also to add a flag to the corresponding argument, but this time, the flag is some string and each char represents a mode rather than a macro.

For example, 'fopen' needs char 'e' in its mode argument string, so

fopen(in_file, "r");

should be

fopen(in_file, "re");
Parameters
[out]ResultMatchResult from AST matcher.
ModeThe required mode char.
ArgPosThe 0-based position of the flag argument.

Definition at line 82 of file CloexecCheck.cpp.

◆ registerMatchersImpl()

void clang::tidy::android::CloexecCheck::registerMatchersImpl ( ast_matchers::MatchFinder *  Finder,
ast_matchers::internal::Matcher< FunctionDecl >  Function 
)
protected

Definition at line 44 of file CloexecCheck.cpp.

Referenced by CloexecCheck().

◆ replaceFunc()

void clang::tidy::android::CloexecCheck::replaceFunc ( const ast_matchers::MatchFinder::MatchResult &  Result,
StringRef  WarningMsg,
StringRef  FixMsg 
)
protected

Type2 is to replace the API to another function that has required the ability.

For example:

creat(path, mode);

should be

open(path, O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC, mode)
Parameters
[out]ResultMatchResult from AST matcher.
WarningMsgThe warning message.
FixMsgThe fix message.

Definition at line 75 of file CloexecCheck.cpp.

Member Data Documentation

◆ FuncBindingStr

const char * clang::tidy::android::CloexecCheck::FuncBindingStr ="func"
staticprotected

Binding name of the function call expression.

Definition at line 98 of file CloexecCheck.h.

◆ FuncDeclBindingStr

const char * clang::tidy::android::CloexecCheck::FuncDeclBindingStr = "funcDecl"
staticprotected

Binding name of the FuncDecl of a function call.

Definition at line 95 of file CloexecCheck.h.


The documentation for this class was generated from the following files: