#ifndef ANYTUN_sysExec_h_INCLUDED
#define ANYTUN_sysExec_h_INCLUDED
-#ifndef NO_EXEC
-
#include <vector>
#include <list>
#include <string>
typedef std::vector<std::string> StringVector;
typedef std::list<std::string> StringList;
-void anytun_exec(std::string const& script);
-void anytun_exec(std::string const& script, StringVector const& args);
-void anytun_exec(std::string const& script, StringList const& env);
-void anytun_exec(std::string const& script, StringVector const& args, StringList const& env);
-void waitForScript(std::string const& script, pid_t pid, int pipefd);
+class SysExec
+{
+ public:
+ SysExec(std::string const& script);
+ SysExec(std::string const& script, StringVector args);
+ SysExec(std::string const& script, StringList env);
+ SysExec(std::string const& script, StringVector args, StringList env);
+ ~SysExec();
+
+ int waitForScript();
+ int getReturnCode() const;
+
+ static void waitAndDestroy(SysExec*& s);
+ private:
+ void doExec(StringVector args, StringList env);
+
+ std::string script_;
+ bool closed_;
+#ifdef _MSC_VER
+ PROCESS_INFORMATION process_info_;
+ DWORD return_code_;
+#else
+ pid_t pid_;
+ int pipefd_;
+ int return_code_;
#endif
+
+
+};
+
#endif