Fixed #2059 (cppcheck gives wrong path in error description)
This commit is contained in:
parent
7e954ebb57
commit
3f79faac2a
|
@ -108,7 +108,7 @@ unsigned int CppCheck::check()
|
|||
if (_settings._errorsOnly == false)
|
||||
{
|
||||
std::string fixedpath(fname);
|
||||
fixedpath = Path::simplifyPath(fixedpath);
|
||||
fixedpath = getFileLister()->simplifyPath(fixedpath.c_str());
|
||||
fixedpath = Path::toNativeSeparators(fixedpath);
|
||||
_errorLogger.reportOut(std::string("Checking ") + fixedpath + std::string("..."));
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ unsigned int CppCheck::check()
|
|||
// If only errors are printed, print filename after the check
|
||||
if (_settings._errorsOnly == false && it != configurations.begin())
|
||||
{
|
||||
std::string fixedpath = Path::simplifyPath(fname);
|
||||
std::string fixedpath = getFileLister()->simplifyPath(fname.c_str());
|
||||
fixedpath = Path::toNativeSeparators(fixedpath);
|
||||
_errorLogger.reportOut(std::string("Checking ") + fixedpath + ": " + cfg + std::string("..."));
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
|
||||
#include "errorlogger.h"
|
||||
#include "filelister.h"
|
||||
#include "path.h"
|
||||
|
||||
#include <sstream>
|
||||
|
@ -219,8 +220,7 @@ std::string ErrorLogger::callStackToString(const std::list<ErrorLogger::ErrorMes
|
|||
|
||||
std::string ErrorLogger::ErrorMessage::FileLocation::getfile(bool convert) const
|
||||
{
|
||||
std::string f(_file);
|
||||
f = Path::simplifyPath(f);
|
||||
std::string f = getFileLister()->simplifyPath(_file.c_str());
|
||||
|
||||
if (convert)
|
||||
f = Path::toNativeSeparators(f);
|
||||
|
|
|
@ -73,7 +73,7 @@ std::string FileLister::simplifyPath(const char *originalPath)
|
|||
|
||||
for (unsigned int i = 0; i < pathParts.size(); ++i)
|
||||
{
|
||||
if (pathParts[i] == ".." && i > 1 && pathParts.size() > i + 1)
|
||||
if (i > 1 && pathParts[i-2] != ".." && pathParts[i] == ".." && pathParts.size() > i + 1)
|
||||
{
|
||||
pathParts.erase(pathParts.begin() + static_cast<int>(i) + 1);
|
||||
pathParts.erase(pathParts.begin() + static_cast<int>(i));
|
||||
|
|
36
lib/path.cpp
36
lib/path.cpp
|
@ -42,39 +42,3 @@ std::string Path::fromNativeSeparators(const std::string &path)
|
|||
return modified;
|
||||
}
|
||||
|
||||
std::string Path::simplifyPath(const std::string &path)
|
||||
{
|
||||
std::string f(path);
|
||||
|
||||
// Remove './' from begin of the path
|
||||
if (f.size() > 2 && f[0] == '.' && f[1] == '/')
|
||||
f = f.erase(0, 2);
|
||||
|
||||
// replace "/ab/../" with "/"..
|
||||
std::string::size_type pos = 0;
|
||||
while ((pos = f.find("..", pos + 1)) != std::string::npos)
|
||||
{
|
||||
// position must be at least 4..
|
||||
if (pos < 4)
|
||||
continue;
|
||||
|
||||
// Previous char must be a separator..
|
||||
if (f[pos-1] != '/')
|
||||
continue;
|
||||
|
||||
// Next char must be a separator..
|
||||
if (f[pos+2] != '/')
|
||||
continue;
|
||||
|
||||
// Locate previous separator..
|
||||
std::string::size_type sep = f.find_last_of("/", pos - 2);
|
||||
if (sep == std::string::npos)
|
||||
continue;
|
||||
|
||||
// Delete substring..
|
||||
f.erase(sep, pos + 2 - sep);
|
||||
pos = sep;
|
||||
}
|
||||
|
||||
return f;
|
||||
}
|
||||
|
|
|
@ -47,14 +47,6 @@ public:
|
|||
* @return converted path.
|
||||
*/
|
||||
static std::string fromNativeSeparators(const std::string &path);
|
||||
|
||||
/**
|
||||
* Simplify given path.
|
||||
* This method simplifies the path removing reduntant parts.
|
||||
* @param path Path string to simplify.
|
||||
* @return simplified path.
|
||||
*/
|
||||
static std::string simplifyPath(const std::string &path);
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
|
|
@ -52,6 +52,8 @@ private:
|
|||
ASSERT_EQUALS("../path/index.h", getFileLister()->simplifyPath("../path/other/../index.h"));
|
||||
ASSERT_EQUALS("a/index.h", getFileLister()->simplifyPath("a/../a/index.h"));
|
||||
ASSERT_EQUALS("a/..", getFileLister()->simplifyPath("a/.."));
|
||||
ASSERT_EQUALS("../../src/test.cpp", getFileLister()->simplifyPath("../../src/test.cpp"));
|
||||
ASSERT_EQUALS("../../../src/test.cpp", getFileLister()->simplifyPath("../../../src/test.cpp"));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue