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:
parent
a3798b2cbf
commit
626be7884a
|
@ -427,54 +427,25 @@ bool cmSystemTools::RunSingleCommand(
|
||||||
verbose = false;
|
verbose = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string program; // store name of program must be in scope function as it
|
std::vector<cmStdString> args = cmSystemTools::ParseArguments(command);
|
||||||
// is put into argv list as a cont char*
|
|
||||||
std::vector<cmStdString> args; // store the program and args program is args[0]
|
if(args.size() < 1)
|
||||||
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 == '\"')
|
|
||||||
{
|
{
|
||||||
args = cmSystemTools::ParseArguments(command);
|
|
||||||
}
|
|
||||||
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;
|
return false;
|
||||||
}
|
}
|
||||||
argv.push_back(program.c_str()); // put program in as argv[0]
|
|
||||||
if(argsTemp.size())
|
std::vector<const char*> argv;
|
||||||
{
|
|
||||||
args = cmSystemTools::ParseArguments(argsTemp.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// copy args into argv
|
|
||||||
for(std::vector<cmStdString>::const_iterator a = args.begin();
|
for(std::vector<cmStdString>::const_iterator a = args.begin();
|
||||||
a != args.end(); ++a)
|
a != args.end(); ++a)
|
||||||
{
|
{
|
||||||
argv.push_back(a->c_str());
|
argv.push_back(a->c_str());
|
||||||
}
|
}
|
||||||
// null terminate array
|
|
||||||
argv.push_back(0);
|
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 )
|
if ( output )
|
||||||
{
|
{
|
||||||
*output = "";
|
*output = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
cmsysProcess* cp = cmsysProcess_New();
|
cmsysProcess* cp = cmsysProcess_New();
|
||||||
cmsysProcess_SetCommand(cp, &*argv.begin());
|
cmsysProcess_SetCommand(cp, &*argv.begin());
|
||||||
cmsysProcess_SetWorkingDirectory(cp, dir);
|
cmsysProcess_SetWorkingDirectory(cp, dir);
|
||||||
|
@ -565,7 +536,6 @@ bool cmSystemTools::RunSingleCommand(
|
||||||
}
|
}
|
||||||
|
|
||||||
cmsysProcess_Delete(cp);
|
cmsysProcess_Delete(cp);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
bool cmSystemTools::RunCommand(const char* command,
|
bool cmSystemTools::RunCommand(const char* command,
|
||||||
|
|
|
@ -188,6 +188,11 @@ public:
|
||||||
* exit code will be stored. If the retVal is not specified and
|
* exit code will be stored. If the retVal is not specified and
|
||||||
* the program exits with a code other than 0, then the this
|
* the program exits with a code other than 0, then the this
|
||||||
* function will return false.
|
* 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,
|
static bool RunSingleCommand(const char* command, std::string* output = 0,
|
||||||
int* retVal = 0, const char* dir = 0, bool verbose = true, double timeout = 0.0);
|
int* retVal = 0, const char* dir = 0, bool verbose = true, double timeout = 0.0);
|
||||||
|
|
|
@ -118,6 +118,7 @@ int main()
|
||||||
exe += cmSystemTools::GetExecutableExtension();
|
exe += cmSystemTools::GetExecutableExtension();
|
||||||
int ret;
|
int ret;
|
||||||
std::string errorMessage;
|
std::string errorMessage;
|
||||||
|
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
|
||||||
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
||||||
{
|
{
|
||||||
if(ret != 10)
|
if(ret != 10)
|
||||||
|
|
|
@ -118,6 +118,7 @@ int main()
|
||||||
exe += cmSystemTools::GetExecutableExtension();
|
exe += cmSystemTools::GetExecutableExtension();
|
||||||
int ret;
|
int ret;
|
||||||
std::string errorMessage;
|
std::string errorMessage;
|
||||||
|
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
|
||||||
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
||||||
{
|
{
|
||||||
if(ret != 10)
|
if(ret != 10)
|
||||||
|
|
|
@ -118,6 +118,7 @@ int main()
|
||||||
exe += cmSystemTools::GetExecutableExtension();
|
exe += cmSystemTools::GetExecutableExtension();
|
||||||
int ret;
|
int ret;
|
||||||
std::string errorMessage;
|
std::string errorMessage;
|
||||||
|
exe = cmSystemTools::ConvertToRunCommandPath(exe.c_str());
|
||||||
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
if(cmSystemTools::RunSingleCommand(exe.c_str(), 0, &ret))
|
||||||
{
|
{
|
||||||
if(ret != 10)
|
if(ret != 10)
|
||||||
|
|
Loading…
Reference in New Issue