diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-13 20:06:28 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-13 20:06:28 +0000 |
commit | a29ece1693ff16ff991e184f6e073c9fb30fcb4b (patch) | |
tree | 61dfe40d76d6cdc9c3184de83c6393111dc96c58 | |
parent | c06e5cf2e3724762a6c9830a00395736ec07d81a (diff) | |
download | external_llvm-a29ece1693ff16ff991e184f6e073c9fb30fcb4b.zip external_llvm-a29ece1693ff16ff991e184f6e073c9fb30fcb4b.tar.gz external_llvm-a29ece1693ff16ff991e184f6e073c9fb30fcb4b.tar.bz2 |
Add a version of sys::ExecuteAndWait that takes StringRefs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183934 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Support/Program.h | 5 | ||||
-rw-r--r-- | lib/Support/Program.cpp | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/include/llvm/Support/Program.h b/include/llvm/Support/Program.h index 38fc8c2..c8729c7 100644 --- a/include/llvm/Support/Program.h +++ b/include/llvm/Support/Program.h @@ -80,6 +80,11 @@ namespace sys { ///< program. bool *ExecutionFailed = 0); + int ExecuteAndWait(StringRef path, const char **args, const char **env = 0, + const StringRef **redirects = 0, + unsigned secondsToWait = 0, unsigned memoryLimit = 0, + std::string *ErrMsg = 0, bool *ExecutionFailed = 0); + /// Similar to ExecuteAndWait, but return immediately. void ExecuteNoWait(const Path &path, const char **args, const char **env = 0, const sys::Path **redirects = 0, unsigned memoryLimit = 0, diff --git a/lib/Support/Program.cpp b/lib/Support/Program.cpp index b1a9b98..1659726 100644 --- a/lib/Support/Program.cpp +++ b/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, |