X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.cpp;h=f7ab199b417121712ef3d9a408a58565cc6961d8;hb=HEAD;hp=672762b91bb2b35ede371ade85820d3090175205;hpb=b5ccba555f4985233532041c34e28d71dd58933f;p=builder.git diff --git a/source/externaltask.cpp b/source/externaltask.cpp deleted file mode 100644 index 672762b..0000000 --- a/source/externaltask.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include -#include -#include -#include "externaltask.h" - -using namespace std; -using namespace Msp; - -ExternalTask::ExternalTask(const vector &argv, const FS::Path &work_dir): - pid(-1), - exit_code(-1) -{ } - -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; -}