diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index d4718dbba06..87d8808899f 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -60,12 +60,6 @@ #include #include -#ifndef _WIN32 -#include -#else -#include -#endif - #include "json.h" #include @@ -139,15 +133,6 @@ static std::vector split(const std::string &str, const std::string return ret; } -static int getPid() -{ -#ifndef _WIN32 - return getpid(); -#else - return _getpid(); -#endif -} - static std::string getDumpFileName(const Settings& settings, const std::string& filename) { if (!settings.dumpFile.empty()) @@ -157,7 +142,7 @@ static std::string getDumpFileName(const Settings& settings, const std::string& if (settings.dump) extension = ".dump"; else - extension = "." + std::to_string(getPid()) + ".dump"; + extension = "." + std::to_string(settings.pid) + ".dump"; if (!settings.dump && !settings.buildDir.empty()) return AnalyzerInformation::getAnalyzerInfoFile(settings.buildDir, filename, emptyString) + extension; @@ -1409,7 +1394,7 @@ void CppCheck::executeAddons(const std::vector& files, const std::s std::string fileList; if (files.size() >= 2 || endsWith(files[0], ".ctu-info")) { - fileList = Path::getPathFromFilename(files[0]) + FILELIST + std::to_string(getPid()); + fileList = Path::getPathFromFilename(files[0]) + FILELIST + std::to_string(mSettings.pid); filesDeleter.addFile(fileList); std::ofstream fout(fileList); for (const std::string& f: files) diff --git a/lib/settings.cpp b/lib/settings.cpp index 1940a07ced3..c91abf5f7e5 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -29,6 +29,13 @@ #include "json.h" +#ifndef _WIN32 +#include // for getpid() +#else +#include // for getpid() +#endif + + std::atomic Settings::mTerminated; const char Settings::SafeChecks::XmlRootName[] = "safe-checks"; @@ -37,12 +44,22 @@ const char Settings::SafeChecks::XmlExternalFunctions[] = "external-functions"; const char Settings::SafeChecks::XmlInternalFunctions[] = "internal-functions"; const char Settings::SafeChecks::XmlExternalVariables[] = "external-variables"; +static int getPid() +{ +#ifndef _WIN32 + return getpid(); +#else + return _getpid(); +#endif +} + Settings::Settings() { severity.setEnabled(Severity::error, true); certainty.setEnabled(Certainty::normal, true); setCheckLevel(Settings::CheckLevel::exhaustive); executor = defaultExecutor(); + pid = getPid(); } std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppressions) diff --git a/lib/settings.h b/lib/settings.h index 55ee9669310..3f0023493c1 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -263,6 +263,9 @@ class CPPCHECKLIB WARN_UNUSED Settings { /** @brief max number of sets of arguments to pass to subfuncions in valueflow */ int performanceValueFlowMaxSubFunctionArgs = 256; + /** @brief pid of cppcheck. Intention is that this is set in the main process. */ + int pid; + /** @brief plist output (--plist-output=<dir>) */ std::string plistOutput;