X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.cpp;h=f7ab199b417121712ef3d9a408a58565cc6961d8;hb=HEAD;hp=f24774e83a5cc8009aae92d2d172a41c2893c039;hpb=64cd148dcd762ea368d9a552e982fdff83781ef2;p=builder.git diff --git a/source/externaltask.cpp b/source/externaltask.cpp deleted file mode 100644 index f24774e..0000000 --- a/source/externaltask.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include -#include -#include -#include -#include -#include "externaltask.h" - -using namespace std; -using namespace Msp; - -ExternalTask::ExternalTask(const vector &a, const FS::Path &wd): - argv(a), - work_dir(wd), - pid(-1), - exit_code(-1) -{ } - -string ExternalTask::get_command() const -{ - string cmd; - for(vector::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; - else - exit_code = 0; - } - else - { - vector cargv(argv.size()+1); - for(unsigned i=0; i(&cargv.front())); - IO::print("Couldn't execute %s\n", argv.front()); - exit(1); - } -} - -Task::Status ExternalTask::check() -{ - if(pid>0) - { - int status; - if(waitpid(pid, &status, WNOHANG)==pid) - { - if(WIFEXITED(status)) - exit_code = WEXITSTATUS(status); - else if(WIFSIGNALED(status)) - exit_code = 256+WTERMSIG(status); - else - exit_code = 1025; - pid = 0; - - signal_finished.emit(!exit_code); - } - else - return RUNNING; - } - - return exit_code ? ERROR : SUCCESS; -}