diff options
author | Rui Ueyama <ruiu@google.com> | 2015-06-07 23:00:29 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2015-06-07 23:00:29 +0000 |
commit | b51f67a175d77a82f092f2c06e4c17d8afb5fa9e (patch) | |
tree | 3dd0423894e186f263c580ede86faa5c27a7d6d2 | |
parent | 0c35b38fd252a58619f7eeea5c8eeb413a2f8527 (diff) | |
download | bcm5719-llvm-b51f67a175d77a82f092f2c06e4c17d8afb5fa9e.tar.gz bcm5719-llvm-b51f67a175d77a82f092f2c06e4c17d8afb5fa9e.zip |
COFF: Use llvm::cl::ExpandReponseFiles.
llvm-svn: 239269
-rw-r--r-- | lld/COFF/DriverUtils.cpp | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index 643e3c65c3d..c29ddfa209c 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -32,6 +32,8 @@ using namespace llvm::COFF; using namespace llvm; +using llvm::cl::ExpandResponseFiles; +using llvm::cl::TokenizeWindowsCommandLine; using llvm::sys::Process; namespace lld { @@ -216,26 +218,14 @@ std::vector<const char *> ArgParser::tokenize(StringRef S) { return V; } -// Creates a new command line by replaceing options starting with '@' +// Creates a new command line by replacing options starting with '@' // character. '@<filename>' is replaced by the file's contents. ErrorOr<std::vector<const char *>> ArgParser::replaceResponseFiles(std::vector<const char *> Argv) { - std::vector<const char *> V; - for (const char *S : Argv) { - if (S[0] != '@') { - V.push_back(S); - continue; - } - StringRef Path = S + 1; - auto BufOrErr = MemoryBuffer::getFile(Path); - if (auto EC = BufOrErr.getError()) - return EC; - std::unique_ptr<MemoryBuffer> Buf = std::move(BufOrErr.get()); - StringRef Str = Alloc.save(Buf->getBuffer()); - std::vector<const char *> Tokens = tokenize(Str); - V.insert(V.end(), Tokens.begin(), Tokens.end()); - } - return V; + SmallVector<const char *, 256> Tokens(&Argv[0], &Argv[0] + Argv.size()); + BumpPtrStringSaver Saver(&Alloc); + ExpandResponseFiles(Saver, TokenizeWindowsCommandLine, Tokens); + return std::vector<const char *>(Tokens.begin(), Tokens.end()); } void printHelp(const char *Argv0) { |