+ExternalTask::ExternalTask(const Arguments &a, const FS::Path &wd):
+ argv(a),
+ work_dir(wd),
+ process(0),
+ exit_code(-1),
+ stdout_dest(PASSTHROUGH),
+ stderr_dest(PASSTHROUGH),
+ capture_pipe(0)
+{
+ if(argv.empty())
+ throw invalid_argument("ExternalTask::ExternalTask");
+}
+
+ExternalTask::~ExternalTask()
+{
+ delete capture_pipe;
+}
+
+string ExternalTask::get_command() const
+{
+ string cmd;
+ for(vector<string>::const_iterator i=argv.begin(); i!=argv.end(); ++i)
+ {
+ if(i!=argv.begin())
+ cmd += ' ';
+
+ for(string::const_iterator j=i->begin(); j!=i->end(); ++j)
+ {
+ if(*j=='"' || *j=='\'' || *j==' ' || *j=='\\' || *j=='&')
+ cmd += '\\';
+ cmd += *j;
+ }
+ }
+
+ return cmd;
+}