Improve path name handling in ErrorLogger.
This commit adds setfile() method to FileLocation class. The setfile method converts in Windows path separators to internally used Unix separators. And getfile() converts path separators back to Windows separators. This fixes bugs that error reports had mixed path separators in paths.
This commit is contained in:
parent
6362e50e73
commit
6db365e6f7
|
@ -146,7 +146,7 @@ protected:
|
|||
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = (*it)->linenr();
|
||||
loc.file = _tokenizer->file(*it);
|
||||
loc.setfile(_tokenizer->file(*it));
|
||||
locationList.push_back(loc);
|
||||
}
|
||||
|
||||
|
|
|
@ -320,7 +320,7 @@ void CheckMemoryLeak::reportErr(const std::list<const Token *> &callstack, Sever
|
|||
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok->linenr();
|
||||
loc.file = tokenizer->file(tok);
|
||||
loc.setfile(tokenizer->file(tok));
|
||||
|
||||
locations.push_back(loc);
|
||||
}
|
||||
|
|
|
@ -187,7 +187,7 @@ void CheckUnusedFunctions::unusedFunctionError(ErrorLogger * const errorLogger,
|
|||
if (!filename.empty())
|
||||
{
|
||||
ErrorLogger::ErrorMessage::FileLocation fileLoc;
|
||||
fileLoc.file = filename;
|
||||
fileLoc.setfile(filename);
|
||||
fileLoc.line = 1;
|
||||
locationList.push_back(fileLoc);
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ bool ErrorLogger::ErrorMessage::deserialize(const std::string &data)
|
|||
}
|
||||
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.file = temp.substr(temp.find(':') + 1);
|
||||
loc.setfile(temp.substr(temp.find(':') + 1));
|
||||
temp = temp.substr(0, temp.find(':'));
|
||||
std::istringstream fiss(temp);
|
||||
fiss >> loc.line;
|
||||
|
@ -217,7 +217,7 @@ std::string ErrorLogger::callStackToString(const std::list<ErrorLogger::ErrorMes
|
|||
|
||||
std::string ErrorLogger::ErrorMessage::FileLocation::getfile() const
|
||||
{
|
||||
std::string f(file);
|
||||
std::string f(_file);
|
||||
|
||||
// replace "/ab/../" with "/"..
|
||||
std::string::size_type pos = 0;
|
||||
|
@ -228,15 +228,15 @@ std::string ErrorLogger::ErrorMessage::FileLocation::getfile() const
|
|||
continue;
|
||||
|
||||
// Previous char must be a separator..
|
||||
if (f[pos-1] != '/' && f[pos-2] != '\\')
|
||||
if (f[pos-1] != '/')
|
||||
continue;
|
||||
|
||||
// Next char must be a separator..
|
||||
if (f[pos+2] != '/' && f[pos+2] != '\\')
|
||||
if (f[pos+2] != '/')
|
||||
continue;
|
||||
|
||||
// Locate previous separator..
|
||||
std::string::size_type sep = f.find_last_of("/\\", pos - 2);
|
||||
std::string::size_type sep = f.find_last_of("/", pos - 2);
|
||||
if (sep == std::string::npos)
|
||||
continue;
|
||||
|
||||
|
@ -245,6 +245,36 @@ std::string ErrorLogger::ErrorMessage::FileLocation::getfile() const
|
|||
pos = sep;
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
{
|
||||
std::string::iterator iter = f.begin();
|
||||
std::string::iterator end = f.end();
|
||||
while (iter != end)
|
||||
{
|
||||
if (*iter == '/')
|
||||
*iter = '\\';
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
void ErrorLogger::ErrorMessage::FileLocation::setfile(const std::string &file)
|
||||
{
|
||||
_file = file;
|
||||
std::cout << "Setting file: " << file << std::endl;
|
||||
#if defined(_WIN32)
|
||||
{
|
||||
std::string::iterator iter = _file.begin();
|
||||
std::string::iterator end = _file.end();
|
||||
while (iter != end)
|
||||
{
|
||||
if (*iter == '\\')
|
||||
*iter = '/';
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -91,8 +91,11 @@ public:
|
|||
}
|
||||
|
||||
std::string getfile() const;
|
||||
std::string file;
|
||||
void setfile(const std::string &file);
|
||||
unsigned int line;
|
||||
private:
|
||||
std::string _file;
|
||||
|
||||
};
|
||||
|
||||
ErrorMessage(const std::list<FileLocation> &callStack, Severity::SeverityType severity, const std::string &msg, const std::string &id);
|
||||
|
|
|
@ -46,7 +46,7 @@ void Preprocessor::writeError(const std::string &fileName, const int linenr, Err
|
|||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = linenr;
|
||||
loc.file = fileName;
|
||||
loc.setfile(fileName);
|
||||
locationList.push_back(loc);
|
||||
errorLogger->reportErr(ErrorLogger::ErrorMessage(locationList,
|
||||
Severity::error,
|
||||
|
@ -754,7 +754,7 @@ std::list<std::string> Preprocessor::getcfgs(const std::string &filedata, const
|
|||
|
||||
ErrorLogger::ErrorMessage errmsg;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.file = filename;
|
||||
loc.setfile(filename);
|
||||
loc.line = linenr;
|
||||
errmsg._callStack.push_back(loc);
|
||||
errmsg._severity = Severity::fromString("error");
|
||||
|
@ -899,7 +899,7 @@ std::list<std::string> Preprocessor::getcfgs(const std::string &filedata, const
|
|||
|
||||
ErrorLogger::ErrorMessage errmsg;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.file = filename;
|
||||
loc.setfile(filename);
|
||||
loc.line = 1;
|
||||
errmsg._callStack.push_back(loc);
|
||||
errmsg._severity = Severity::fromString("error");
|
||||
|
|
|
@ -408,10 +408,10 @@ void Tokenizer::duplicateTypedefError(const Token *tok1, const Token *tok2, cons
|
|||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok1->linenr();
|
||||
loc.file = file(tok1);
|
||||
loc.setfile(file(tok1));
|
||||
locationList.push_back(loc);
|
||||
loc.line = tok2->linenr();
|
||||
loc.file = file(tok2);
|
||||
loc.setfile(file(tok2));
|
||||
locationList.push_back(loc);
|
||||
|
||||
const ErrorLogger::ErrorMessage errmsg(locationList,
|
||||
|
@ -434,10 +434,10 @@ void Tokenizer::duplicateDeclarationError(const Token *tok1, const Token *tok2,
|
|||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok1->linenr();
|
||||
loc.file = file(tok1);
|
||||
loc.setfile(file(tok1));
|
||||
locationList.push_back(loc);
|
||||
loc.line = tok2->linenr();
|
||||
loc.file = file(tok2);
|
||||
loc.setfile(file(tok2));
|
||||
locationList.push_back(loc);
|
||||
|
||||
const ErrorLogger::ErrorMessage errmsg(locationList,
|
||||
|
@ -2284,7 +2284,7 @@ void Tokenizer::simplifyTemplates()
|
|||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok2->linenr();
|
||||
loc.file = file(tok2);
|
||||
loc.setfile(file(tok2));
|
||||
locationList.push_back(loc);
|
||||
|
||||
const ErrorLogger::ErrorMessage errmsg(locationList,
|
||||
|
@ -6177,10 +6177,10 @@ void Tokenizer::duplicateEnumError(const Token * tok1, const Token * tok2, const
|
|||
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok1->linenr();
|
||||
loc.file = file(tok1);
|
||||
loc.setfile(file(tok1));
|
||||
locationList.push_back(loc);
|
||||
loc.line = tok2->linenr();
|
||||
loc.file = file(tok2);
|
||||
loc.setfile(file(tok2));
|
||||
locationList.push_back(loc);
|
||||
|
||||
const ErrorLogger::ErrorMessage errmsg(locationList,
|
||||
|
@ -6926,7 +6926,7 @@ void Tokenizer::syntaxError(const Token *tok, char c)
|
|||
{
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok->linenr();
|
||||
loc.file = file(tok);
|
||||
loc.setfile(file(tok));
|
||||
locationList.push_back(loc);
|
||||
}
|
||||
|
||||
|
@ -6969,7 +6969,7 @@ void Tokenizer::cppcheckError(const Token *tok) const
|
|||
{
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.line = tok->linenr();
|
||||
loc.file = file(tok);
|
||||
loc.setfile(file(tok));
|
||||
locationList.push_back(loc);
|
||||
}
|
||||
|
||||
|
|
|
@ -382,7 +382,7 @@ private:
|
|||
{
|
||||
ErrorLogger::ErrorMessage errorMessage;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.file = "ab/cd/../ef.h";
|
||||
loc.setfile("ab/cd/../ef.h");
|
||||
errorMessage._callStack.push_back(loc);
|
||||
ASSERT_EQUALS("<error file=\"ab/ef.h\" line=\"0\" id=\"\" severity=\"\" msg=\"\"/>", errorMessage.toXML());
|
||||
ASSERT_EQUALS("[ab/ef.h:0]: ", errorMessage.toString());
|
||||
|
@ -392,7 +392,7 @@ private:
|
|||
{
|
||||
ErrorLogger::ErrorMessage errorMessage;
|
||||
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||
loc.file = "some/{file}file.cpp";
|
||||
loc.setfile("some/{file}file.cpp");
|
||||
loc.line = 10;
|
||||
errorMessage._callStack.push_back(loc);
|
||||
errorMessage._id = "testId";
|
||||
|
|
Loading…
Reference in New Issue