killerbot: Fixed #1314 (specify the files to check in 1 input file)

This commit is contained in:
Daniel Marjamäki 2010-01-27 21:43:01 +01:00
parent e49f7bfa0e
commit 15b4abd6d3
1 changed files with 35 additions and 3 deletions

View File

@ -81,6 +81,32 @@ const char * CppCheck::version()
return "1.40"; return "1.40";
} }
static void AddFilesToList(const std::string& FileList, std::vector<std::string>& PathNames)
{
// to keep things initially simple, if the file can't be opened, just be
// silent and move on
// ideas : we could also require this should be an xml file, with the filenames
// specified in an xml structure
// we could elaborate this then, to also include the I-paths, ...
// basically for everything that makes the command line very long
// xml is a bonus then, since we can easily extend it
// we need a good parser then -> suggestion : TinyXml
// drawback : creates a dependency
std::ifstream Files(FileList.c_str());
if (Files)
{
std::string FileName;
while (std::getline(Files, FileName)) // next line
{
if (!FileName.empty())
{
PathNames.push_back(FileName);
}
}
}
}
void CppCheck::parseFromArgs(int argc, const char* const argv[]) void CppCheck::parseFromArgs(int argc, const char* const argv[])
{ {
std::vector<std::string> pathnames; std::vector<std::string> pathnames;
@ -222,6 +248,12 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
_settings._includePaths.push_back(path); _settings._includePaths.push_back(path);
} }
// file list specified
else if (strncmp(argv[i], "--file-list=", 12) == 0)
{
// open this file and read every input file (1 file name per line)
AddFilesToList(12 + argv[i], pathnames);
}
// Output formatter // Output formatter
else if (strcmp(argv[i], "--template") == 0) else if (strcmp(argv[i], "--template") == 0)
@ -351,9 +383,8 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
" cppcheck [--all] [--append=file] [--auto-dealloc file.lst] [--enable]\n" " cppcheck [--all] [--append=file] [--auto-dealloc file.lst] [--enable]\n"
" [--error-exitcode=[n]] [--exitcode-suppressions file] [--force]\n" " [--error-exitcode=[n]] [--exitcode-suppressions file] [--force]\n"
" [--help] [-Idir] [-j [jobs]] [--quiet] [--style]\n" " [--help] [-Idir] [-j [jobs]] [--quiet] [--style]\n"
" [--suppressions file.txt] [--inline-suppr] [--verbose]\n" " [--suppressions file.txt] [--inline-suppr] [--file-list=file.txt]\n"
" [--version] [--xml] [file or path1]\n" " [--verbose] [--version] [--xml] [file or path1] [file or path] ..\n"
" [file or path] ...\n"
"\n" "\n"
"If path is given instead of filename, *.cpp, *.cxx, *.cc, *.c++ and *.c files\n" "If path is given instead of filename, *.cpp, *.cxx, *.cc, *.c++ and *.c files\n"
"are checked recursively from given directory.\n\n" "are checked recursively from given directory.\n\n"
@ -400,6 +431,7 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
" --inline-suppr Enable inline suppressions. Use them by placing one or\n" " --inline-suppr Enable inline suppressions. Use them by placing one or\n"
" more comments in the form: // cppcheck-suppress memleak\n" " more comments in the form: // cppcheck-suppress memleak\n"
" on the lines before the warning to suppress.\n" " on the lines before the warning to suppress.\n"
" --file-list=file Specify the files to check in a text file. One Filename per line.\n"
" --template '[text]' Format the error messages. E.g.\n" " --template '[text]' Format the error messages. E.g.\n"
" '{file}:{line},{severity},{id},{message}' or\n" " '{file}:{line},{severity},{id},{message}' or\n"
" '{file}({line}):({severity}) {message}'\n" " '{file}({line}):({severity}) {message}'\n"