ENH: still escape () but do not escape

This commit is contained in:
Bill Hoffman 2006-08-14 09:50:52 -04:00
parent 5c1bd19eb8
commit 71af96aad1

View File

@ -1366,17 +1366,31 @@ kwsys_stl::string SystemTools::ConvertToUnixOutputPath(const char* path)
{ {
ret.erase(pos, 1); ret.erase(pos, 1);
} }
// now escape spaces if there is a space in the path // escape spaces and () in the path
if(ret.find_first_of(" ()") != kwsys_stl::string::npos) if(ret.find_first_of(" ()") != kwsys_stl::string::npos)
{ {
kwsys_stl::string result = ""; kwsys_stl::string result = "";
char lastch = 1; char lastch = 1;
bool inDollarVariable = false;
for(const char* ch = ret.c_str(); *ch != '\0'; ++ch) for(const char* ch = ret.c_str(); *ch != '\0'; ++ch)
{ {
// if it is already escaped then don't try to escape it again // if it is already escaped then don't try to escape it again
if((*ch == ' ' || *ch == '(' || *ch == ')') && lastch != '\\') if((*ch == ' ' || *ch == '(' || *ch == ')') && lastch != '\\')
{ {
result += '\\'; if(*ch == '(' && lastch == '$')
{
inDollarVariable = true;
}
// if we are in a $(..... and we get a ) then do not escape
// the ) and but set inDollarVariable to false
else if(*ch == ')' && inDollarVariable)
{
inDollarVariable = false;
}
else
{
result += '\\';
}
} }
result += *ch; result += *ch;
lastch = *ch; lastch = *ch;