From 6828fe475a2aaa538e368b977d438be1cbedc4d7 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 13 Jun 2013 20:06:28 +0000 Subject: Add a version of sys::ExecuteAndWait that takes StringRefs. llvm-svn: 183934 --- llvm/lib/Support/Program.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'llvm/lib/Support/Program.cpp') diff --git a/llvm/lib/Support/Program.cpp b/llvm/lib/Support/Program.cpp index b1a9b98755c..165972610d8 100644 --- a/llvm/lib/Support/Program.cpp +++ b/llvm/lib/Support/Program.cpp @@ -29,6 +29,29 @@ static bool Execute(void **Data, const Path &path, const char **args, static int Wait(void *&Data, const Path &path, unsigned secondsToWait, std::string *ErrMsg); +int sys::ExecuteAndWait(StringRef path, const char **args, const char **env, + const StringRef **redirects, unsigned secondsToWait, + unsigned memoryLimit, std::string *ErrMsg, + bool *ExecutionFailed) { + Path P(path); + if (!redirects) + return ExecuteAndWait(P, args, env, 0, secondsToWait, memoryLimit, ErrMsg, + ExecutionFailed); + Path IO[3]; + const Path *IOP[3]; + for (int I = 0; I < 3; ++I) { + if (redirects[I]) { + IO[I] = *redirects[I]; + IOP[I] = &IO[I]; + } else { + IOP[I] = 0; + } + } + + return ExecuteAndWait(P, args, env, IOP, secondsToWait, memoryLimit, ErrMsg, + ExecutionFailed); +} + int sys::ExecuteAndWait(const Path &path, const char **args, const char **envp, const Path **redirects, unsigned secondsToWait, unsigned memoryLimit, std::string *ErrMsg, -- cgit v1.2.3