3 #include <msp/fs/dir.h>
4 #include <msp/io/print.h>
5 #include "externaltask.h"
10 ExternalTask::ExternalTask(const vector<string> &argv, const FS::Path &work_dir):
23 vector<const char *> cargv(argv.size()+1);
24 for(unsigned i=0; i<argv.size(); ++i)
25 cargv[i] = argv[i].c_str();
30 execvp(cargv.front(), const_cast<char *const *>(&cargv.front()));
31 IO::print("Couldn't execute %s\n", argv.front());
36 Task::Status ExternalTask::check()
41 if(waitpid(pid, &status, WNOHANG)==pid)
44 exit_code = WEXITSTATUS(status);
45 else if(WIFSIGNALED(status))
46 exit_code = 256+WTERMSIG(status);
51 signal_finished.emit(!exit_code);
57 return exit_code ? ERROR : SUCCESS;