clang-tools 6.0.0

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:
[legend]
Collaboration diagram for clang::tidy::android::CloexecCheck:
[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] | Result | MatchResult from AST matcher.
  | MacroFlag | The macro name of the flag.
  | ArgPos | The 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] | Result | MatchResult from AST matcher.
  | Mode | The required mode char.
  | ArgPos | The 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] | Result | MatchResult from AST matcher.
  | WarningMsg | The warning message.
  | FixMsg | The fix message.

Definition at line 75 of file CloexecCheck.cpp.

## Member Data Documentation

## ◆ FuncBindingStr

const char * clang::tidy::android::CloexecCheck::FuncBindingStr ="func"
| static protected

Binding name of the function call expression.

Definition at line 98 of file CloexecCheck.h.

## ◆ FuncDeclBindingStr

const char * clang::tidy::android::CloexecCheck::FuncDeclBindingStr = "funcDecl"
| static protected

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:

- CloexecCheck.h
- CloexecCheck.cpp