ENH: fix for regkey and ; separation

This commit is contained in:
Bill Hoffman 2002-04-01 14:50:00 -05:00
parent 92897bf3a8
commit 2b4e802a94
1 changed files with 45 additions and 14 deletions

View File

@ -1785,32 +1785,63 @@ void cmSystemTools::ExpandListArguments(std::vector<std::string> const& argument
std::vector<std::string>::const_iterator i;
for(i = arguments.begin();i != arguments.end(); ++i)
{
if(i->find(';') != std::string::npos)
// if there are no ; in the name then just copy the current string
if(i->find(';') == std::string::npos)
{
newargs.push_back(*i);
}
else
{
std::string::size_type start = 0;
std::string::size_type endpos = 0;
while(endpos != std::string::npos)
const std::string::size_type size = i->size();
// break up ; separated sections of the string into separate strings
while(endpos != size)
{
endpos = i->find(';', start);
std::string::size_type len;
if(endpos != std::string::npos)
if(endpos == std::string::npos)
{
len = endpos - start;
}
else
{
len = i->size()-start;
endpos = i->size();
}
std::string::size_type len = endpos - start;
if (len > 0)
{
newargs.push_back(i->substr(start, len));
// check for a closing ] after the start position
if(i->find('[', start) == std::string::npos)
{
// if there is no [ in the string then keep it
newargs.push_back(i->substr(start, len));
}
else
{
int opencount = 0;
int closecount = 0;
for(std::string::size_type j = start; j < endpos; ++j)
{
if(i->at(j) == '[')
{
++opencount;
}
else if (i->at(j) == ']')
{
++closecount;
}
}
if(opencount != closecount)
{
// skip this one
endpos = i->find(';', endpos+1);
if(endpos == std::string::npos)
{
endpos = i->size();
}
len = endpos - start;
}
newargs.push_back(i->substr(start, len));
}
}
start = endpos+1;
}
}
else
{
newargs.push_back(*i);
}
}
}