From 2bc4ee925ec25e922956d9a06a9aa9f33859dafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Sun, 30 Apr 2023 20:16:51 +0200 Subject: [PATCH] parse files with `simplecpp` without providing a stream (#4955) --- lib/cppcheck.cpp | 20 +++++++++++++------- lib/cppcheck.h | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index a9f15698b..8b603ad5a 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 const auto output_it = std::find_if(outputList.cbegin(), outputList.cend(), [](const simplecpp::Output &output){ diff --git a/lib/cppcheck.h b/lib/cppcheck.h index b737118e1..02b161cc2 100644 --- a/lib/cppcheck.h +++ b/lib/cppcheck.h @@ -155,7 +155,7 @@ private: * @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