#include "llvm/Support/Program.h"
#include "llvm/Config/config.h"
+#include "llvm/Support/system_error.h"
using namespace llvm;
using namespace sys;
//=== independent code.
//===----------------------------------------------------------------------===//
-int
-Program::ExecuteAndWait(const Path& path,
- const char** args,
- const char** envp,
- const Path** redirects,
- unsigned secondsToWait,
- unsigned memoryLimit,
- std::string* ErrMsg) {
- Program prg;
- if (prg.Execute(path, args, envp, redirects, memoryLimit, ErrMsg))
- return prg.Wait(path, secondsToWait, ErrMsg);
- else
- return -1;
+static bool Execute(void **Data, StringRef Program, const char **args,
+ const char **env, const StringRef **Redirects,
+ unsigned memoryLimit, std::string *ErrMsg);
+
+static int Wait(void *&Data, StringRef Program, unsigned secondsToWait,
+ std::string *ErrMsg);
+
+int sys::ExecuteAndWait(StringRef Program, const char **args, const char **envp,
+ const StringRef **redirects, unsigned secondsToWait,
+ unsigned memoryLimit, std::string *ErrMsg,
+ bool *ExecutionFailed) {
+ void *Data = 0;
+ if (Execute(&Data, Program, args, envp, redirects, memoryLimit, ErrMsg)) {
+ if (ExecutionFailed) *ExecutionFailed = false;
+ return Wait(Data, Program, secondsToWait, ErrMsg);
+ }
+ if (ExecutionFailed) *ExecutionFailed = true;
+ return -1;
}
-void
-Program::ExecuteNoWait(const Path& path,
- const char** args,
- const char** envp,
- const Path** redirects,
- unsigned memoryLimit,
- std::string* ErrMsg) {
- Program prg;
- prg.Execute(path, args, envp, redirects, memoryLimit, ErrMsg);
+void sys::ExecuteNoWait(StringRef Program, const char **args, const char **envp,
+ const StringRef **redirects, unsigned memoryLimit,
+ std::string *ErrMsg) {
+ Execute(/*Data*/ 0, Program, args, envp, redirects, memoryLimit, ErrMsg);
}
// Include the platform-specific parts of this class.