diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index a80148debdf..1de4ad37732 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -583,14 +583,13 @@ unsigned int CppCheck::check(const std::string &path) return mExitCode; } - std::ifstream fin(path); - return checkFile(Path::simplifyPath(path), emptyString, fin); + return checkFile(Path::simplifyPath(path), emptyString); } unsigned int CppCheck::check(const std::string &path, const std::string &content) { std::istringstream iss(content); - return checkFile(Path::simplifyPath(path), emptyString, iss); + return checkFile(Path::simplifyPath(path), emptyString, &iss); } unsigned int CppCheck::check(const ImportProject::FileSettings &fs) @@ -615,13 +614,20 @@ unsigned int CppCheck::check(const ImportProject::FileSettings &fs) temp.mSettings.includePaths.insert(temp.mSettings.includePaths.end(), fs.systemIncludePaths.cbegin(), fs.systemIncludePaths.cend()); return temp.check(Path::simplifyPath(fs.filename)); } - std::ifstream fin(fs.filename); - const unsigned int returnValue = temp.checkFile(Path::simplifyPath(fs.filename), fs.cfg, fin); + const unsigned int returnValue = temp.checkFile(Path::simplifyPath(fs.filename), fs.cfg); mSettings.nomsg.addSuppressions(temp.mSettings.nomsg.getSuppressions()); return returnValue; } -unsigned int CppCheck::checkFile(const std::string& filename, const std::string &cfgname, std::istream& fileStream) +static simplecpp::TokenList createTokenList(const std::string& filename, std::vector& files, simplecpp::OutputList* outputList, std::istream* fileStream) +{ + if (fileStream) + return {*fileStream, files, filename, outputList}; + + return {filename, files, outputList}; +} + +unsigned int CppCheck::checkFile(const std::string& filename, const std::string &cfgname, std::istream* fileStream) { mExitCode = 0; @@ -663,7 +669,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string simplecpp::OutputList outputList; std::vector files; - simplecpp::TokenList tokens1(fileStream, files, filename, &outputList); + simplecpp::TokenList tokens1 = createTokenList(filename, files, &outputList, fileStream); // If there is a syntax error, report it and stop for (const simplecpp::Output &output : outputList) { diff --git a/lib/cppcheck.h b/lib/cppcheck.h index 46ab23ae040..24b8b412355 100644 --- a/lib/cppcheck.h +++ b/lib/cppcheck.h @@ -159,7 +159,7 @@ class CPPCHECKLIB CppCheck : ErrorLogger { * @param fileStream stream the file content can be read from * @return number of errors found */ - unsigned int checkFile(const std::string& filename, const std::string &cfgname, std::istream& fileStream); + unsigned int checkFile(const std::string& filename, const std::string &cfgname, std::istream* fileStream = nullptr); /** * @brief Check raw tokens