diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
commit | 718c552901d703c502ccbefdfc3c9028d608b947 (patch) | |
tree | 46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/lib/Support/Program.cpp | |
parent | e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff) | |
download | ydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/lib/Support/Program.cpp')
-rw-r--r-- | contrib/libs/llvm12/lib/Support/Program.cpp | 196 |
1 files changed, 98 insertions, 98 deletions
diff --git a/contrib/libs/llvm12/lib/Support/Program.cpp b/contrib/libs/llvm12/lib/Support/Program.cpp index c7a59642b2..44ab33018a 100644 --- a/contrib/libs/llvm12/lib/Support/Program.cpp +++ b/contrib/libs/llvm12/lib/Support/Program.cpp @@ -1,107 +1,107 @@ -//===-- Program.cpp - Implement OS Program Concept --------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file implements the operating system Program concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Support/Program.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Config/llvm-config.h" -#include "llvm/Support/raw_ostream.h" -#include <system_error> -using namespace llvm; -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -static bool Execute(ProcessInfo &PI, StringRef Program, - ArrayRef<StringRef> Args, Optional<ArrayRef<StringRef>> Env, - ArrayRef<Optional<StringRef>> Redirects, +//===-- Program.cpp - Implement OS Program Concept --------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements the operating system Program concept. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/Program.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Config/llvm-config.h" +#include "llvm/Support/raw_ostream.h" +#include <system_error> +using namespace llvm; +using namespace sys; + +//===----------------------------------------------------------------------===// +//=== WARNING: Implementation here must contain only TRULY operating system +//=== independent code. +//===----------------------------------------------------------------------===// + +static bool Execute(ProcessInfo &PI, StringRef Program, + ArrayRef<StringRef> Args, Optional<ArrayRef<StringRef>> Env, + ArrayRef<Optional<StringRef>> Redirects, unsigned MemoryLimit, std::string *ErrMsg, BitVector *AffinityMask); - -int sys::ExecuteAndWait(StringRef Program, ArrayRef<StringRef> Args, - Optional<ArrayRef<StringRef>> Env, - ArrayRef<Optional<StringRef>> Redirects, - unsigned SecondsToWait, unsigned MemoryLimit, - std::string *ErrMsg, bool *ExecutionFailed, + +int sys::ExecuteAndWait(StringRef Program, ArrayRef<StringRef> Args, + Optional<ArrayRef<StringRef>> Env, + ArrayRef<Optional<StringRef>> Redirects, + unsigned SecondsToWait, unsigned MemoryLimit, + std::string *ErrMsg, bool *ExecutionFailed, Optional<ProcessStatistics> *ProcStat, BitVector *AffinityMask) { - assert(Redirects.empty() || Redirects.size() == 3); - ProcessInfo PI; + assert(Redirects.empty() || Redirects.size() == 3); + ProcessInfo PI; if (Execute(PI, Program, Args, Env, Redirects, MemoryLimit, ErrMsg, AffinityMask)) { - if (ExecutionFailed) - *ExecutionFailed = false; - ProcessInfo Result = - Wait(PI, SecondsToWait, /*WaitUntilTerminates=*/SecondsToWait == 0, - ErrMsg, ProcStat); - return Result.ReturnCode; - } - - if (ExecutionFailed) - *ExecutionFailed = true; - - return -1; -} - -ProcessInfo sys::ExecuteNoWait(StringRef Program, ArrayRef<StringRef> Args, - Optional<ArrayRef<StringRef>> Env, - ArrayRef<Optional<StringRef>> Redirects, - unsigned MemoryLimit, std::string *ErrMsg, + if (ExecutionFailed) + *ExecutionFailed = false; + ProcessInfo Result = + Wait(PI, SecondsToWait, /*WaitUntilTerminates=*/SecondsToWait == 0, + ErrMsg, ProcStat); + return Result.ReturnCode; + } + + if (ExecutionFailed) + *ExecutionFailed = true; + + return -1; +} + +ProcessInfo sys::ExecuteNoWait(StringRef Program, ArrayRef<StringRef> Args, + Optional<ArrayRef<StringRef>> Env, + ArrayRef<Optional<StringRef>> Redirects, + unsigned MemoryLimit, std::string *ErrMsg, bool *ExecutionFailed, BitVector *AffinityMask) { - assert(Redirects.empty() || Redirects.size() == 3); - ProcessInfo PI; - if (ExecutionFailed) - *ExecutionFailed = false; + assert(Redirects.empty() || Redirects.size() == 3); + ProcessInfo PI; + if (ExecutionFailed) + *ExecutionFailed = false; if (!Execute(PI, Program, Args, Env, Redirects, MemoryLimit, ErrMsg, AffinityMask)) - if (ExecutionFailed) - *ExecutionFailed = true; - - return PI; -} - -bool sys::commandLineFitsWithinSystemLimits(StringRef Program, - ArrayRef<const char *> Args) { - SmallVector<StringRef, 8> StringRefArgs; - StringRefArgs.reserve(Args.size()); - for (const char *A : Args) - StringRefArgs.emplace_back(A); - return commandLineFitsWithinSystemLimits(Program, StringRefArgs); -} - -void sys::printArg(raw_ostream &OS, StringRef Arg, bool Quote) { - const bool Escape = Arg.find_first_of(" \"\\$") != StringRef::npos; - - if (!Quote && !Escape) { - OS << Arg; - return; - } - - // Quote and escape. This isn't really complete, but good enough. - OS << '"'; - for (const auto c : Arg) { - if (c == '"' || c == '\\' || c == '$') - OS << '\\'; - OS << c; - } - OS << '"'; -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Program.inc" -#endif -#ifdef _WIN32 -#include "Windows/Program.inc" -#endif + if (ExecutionFailed) + *ExecutionFailed = true; + + return PI; +} + +bool sys::commandLineFitsWithinSystemLimits(StringRef Program, + ArrayRef<const char *> Args) { + SmallVector<StringRef, 8> StringRefArgs; + StringRefArgs.reserve(Args.size()); + for (const char *A : Args) + StringRefArgs.emplace_back(A); + return commandLineFitsWithinSystemLimits(Program, StringRefArgs); +} + +void sys::printArg(raw_ostream &OS, StringRef Arg, bool Quote) { + const bool Escape = Arg.find_first_of(" \"\\$") != StringRef::npos; + + if (!Quote && !Escape) { + OS << Arg; + return; + } + + // Quote and escape. This isn't really complete, but good enough. + OS << '"'; + for (const auto c : Arg) { + if (c == '"' || c == '\\' || c == '$') + OS << '\\'; + OS << c; + } + OS << '"'; +} + +// Include the platform-specific parts of this class. +#ifdef LLVM_ON_UNIX +#include "Unix/Program.inc" +#endif +#ifdef _WIN32 +#include "Windows/Program.inc" +#endif |