ENH: Added Split method to cmSystemTools to split a string into lines on its newlines.

This commit is contained in:
Brad King 2002-10-11 10:16:01 -04:00
parent 3d3d7a9146
commit a8d038dbd0
2 changed files with 34 additions and 2 deletions

View File

@ -1894,6 +1894,34 @@ std::string cmSystemTools::CollapseFullPath(const char* in_name)
#endif
}
bool cmSystemTools::Split(const char* str, std::vector<cmStdString>& lines)
{
std::string data(str);
std::string::size_type lpos = 0;
while(lpos < data.length())
{
std::string::size_type rpos = data.find_first_of("\n", lpos);
if(rpos == std::string::npos)
{
// Line ends at end of string without a newline.
lines.push_back(data.substr(lpos));
return false;
}
if((rpos > lpos) && (data[rpos-1] == '\r'))
{
// Line ends in a "\r\n" pair, remove both characters.
lines.push_back(data.substr(lpos, (rpos-1)-lpos));
}
else
{
// Line ends in a "\n", remove the character.
lines.push_back(data.substr(lpos, rpos-lpos));
}
lpos = rpos+1;
}
return true;
}
/**
* Return path of a full filename (no trailing slashes).
* Warning: returned path is converted to Unix slashes format.

View File

@ -218,11 +218,11 @@ public:
///! Find a file in the system PATH, with optional extra paths.
static std::string FindFile(const char* name,
const std::vector<std::string>& path= std::vector<std::string>());
const std::vector<std::string>& path= std::vector<std::string>());
///! Find an executable in the system PATH, with optional extra paths.
static std::string FindProgram(const char* name,
const std::vector<std::string>& path = std::vector<std::string>(),
const std::vector<std::string>& path = std::vector<std::string>(),
bool no_system_path = false);
///! Find a library in the system PATH, with optional extra paths.
@ -293,6 +293,10 @@ public:
static void EnableRunCommandOutput() {s_DisableRunCommandOutput = false; }
static bool GetRunCommandOutput() { return s_DisableRunCommandOutput; }
/** Split a string on its newlines into multiple lines. Returns
false only if the last line stored had no newline. */
static bool Split(const char* str, std::vector<cmStdString>& lines);
/**
* Come constants for different file formats.
*/