FIX: go back to not trying to handle spaces in the path for run single command and comment it so that people know to call the right thing

This commit is contained in:
Bill Hoffman 2004-10-25 13:16:05 -04:00
parent a3798b2cbf
commit 626be7884a
5 changed files with 18 additions and 40 deletions

View File

@ -427,54 +427,25 @@ bool cmSystemTools::RunSingleCommand(
verbose = false;
}
std::string program; // store name of program must be in scope function as it
// is put into argv list as a cont char*
std::vector<cmStdString> args; // store the program and args program is args[0]
std::vector<const char*> argv; // store args in a format so that process cmsysProcess can use it
// check to see if the command contains a double quoted string at the start
// if so, then just use parse arguments to split things up
if(command && *command == '\"')
std::vector<cmStdString> args = cmSystemTools::ParseArguments(command);
if(args.size() < 1)
{
args = cmSystemTools::ParseArguments(command);
return false;
}
else
{
std::string argsTemp; // Store the arguments to the program
cmSystemTools::SplitProgramFromArgs(command, program, argsTemp);
// if there is no program to run then return false
if(program.size() < 1)
{
// check for a bad call to SplitProgramFromArgs
if(strlen(command) >= 1)
{
cmSystemTools::Error("Error in SplitProgramFromArgs for: ", command);
}
return false;
}
argv.push_back(program.c_str()); // put program in as argv[0]
if(argsTemp.size())
{
args = cmSystemTools::ParseArguments(argsTemp.c_str());
}
}
// copy args into argv
std::vector<const char*> argv;
for(std::vector<cmStdString>::const_iterator a = args.begin();
a != args.end(); ++a)
{
argv.push_back(a->c_str());
}
// null terminate array
argv.push_back(0);
// if the only argument is null then there is nothing to run and return false
if(!argv[0])
{
return false;
}
if ( output )
{
*output = "";
}
cmsysProcess* cp = cmsysProcess_New();
cmsysProcess_SetCommand(cp, &*argv.begin());
cmsysProcess_SetWorkingDirectory(cp, dir);
@ -565,7 +536,6 @@ bool cmSystemTools::RunSingleCommand(
}
cmsysProcess_Delete(cp);
return result;
}
bool cmSystemTools::RunCommand(const char* command,

View File

@ -188,6 +188,11 @@ public:
* exit code will be stored. If the retVal is not specified and
* the program exits with a code other than 0, then the this
* function will return false.
*
* If the command has spaces in the path the caller MUST call
* cmSystemTools::ConvertToRunCommandPath on the command before passing
* it into this function or it will not work. The command must be correctly
* escaped for this to with spaces.
*/
static bool RunSingleCommand(const char* command, std::string* output = 0,
int* retVal = 0, const char* dir = 0, bool verbose = true, double timeout = 0.0);

View File

@ -117,7 +117,8 @@ int main()
exe += "A";
exe += cmSystemTools::GetExecutableExtension();
int ret;
std::string errorMessage;
std::string errorMessage;
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
{
if(ret != 10)

View File

@ -117,7 +117,8 @@ int main()
exe += "A";
exe += cmSystemTools::GetExecutableExtension();
int ret;
std::string errorMessage;
std::string errorMessage;
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
{
if(ret != 10)

View File

@ -117,7 +117,8 @@ int main()
exe += "A";
exe += cmSystemTools::GetExecutableExtension();
int ret;
std::string errorMessage;
std::string errorMessage;
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
{
if(ret != 10)