#include <cstdlib>
+#include <unistd.h>
#include <sys/wait.h>
#include <msp/fs/dir.h>
#include <msp/io/print.h>
using namespace std;
using namespace Msp;
-ExternalTask::ExternalTask(const vector<string> &argv, const FS::Path &work_dir):
+ExternalTask::ExternalTask(const vector<string> &a, const FS::Path &wd):
+ argv(a),
+ work_dir(wd),
pid(-1),
exit_code(-1)
+{ }
+
+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;
+}
+
+void ExternalTask::start()
{
if((pid = fork()))
{
if(pid==-1)
- exit_code = 1;
+ exit_code = 1026;
else
exit_code = 0;
}