X-Git-Url: https://ruin.nu/git/?p=popboot.git;a=blobdiff_plain;f=action.cpp;h=5dbe86954cbbd29644ba710d35dd8585b2774c62;hp=87947ca054bb6684bfe9e23e006a16ff94df7c6c;hb=HEAD;hpb=716fc4e282ce52fe953867171c046acd3b614d3b diff --git a/action.cpp b/action.cpp index 87947ca..5dbe869 100644 --- a/action.cpp +++ b/action.cpp @@ -1,4 +1,7 @@ #include "action.h" +#include +#include +#include #include using namespace std; using namespace __gnu_cxx; @@ -16,6 +19,7 @@ Action::Action(const Action& action){ _name = action._name; _preconditions = action._preconditions; _effects = action._effects; + _executable = action._executable; } const Literals& Action::effects(int value) const{ @@ -30,8 +34,20 @@ const Preconditions& Action::preconditions() const{ } int Action::execute() const{ - cout << "Executing: " << _executable << endl; - return 0; + cout << "Executing: " << _name << endl; + //return system(_executable.c_str()); + pid_t proc = fork(); + if (proc == -1) return proc; + + int retval; + if (proc == 0) { + //execl("/bin/sh", "-c", _executable.c_str(), (char*) NULL); + retval = system(_executable.c_str()); + _exit(WEXITSTATUS(retval)); + } + waitpid(proc,&retval,0); + cout << "Done executing: " << _name << ", returnvalue: " << WEXITSTATUS(retval) << endl; + return WEXITSTATUS(retval); } const string& Action::name() const{