diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-06 20:14:02 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-06 20:14:02 +0000 |
commit | c09ce7fd2d62d85dcdf370f4bef732380fca4f1b (patch) | |
tree | dd5cf05b9ae703e6fb816b9663d4a0c903e0c2c6 /lib | |
parent | 5d4d137132d719d0d20d119375b205d6a2c721ee (diff) | |
download | src-test2-c09ce7fd2d62d85dcdf370f4bef732380fca4f1b.tar.gz src-test2-c09ce7fd2d62d85dcdf370f4bef732380fca4f1b.zip |
Notes
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Core/Reproduce.cpp | 58 |
1 files changed, 3 insertions, 55 deletions
diff --git a/lib/Core/Reproduce.cpp b/lib/Core/Reproduce.cpp index 39b0e41c44e5..ab7261fa0e75 100644 --- a/lib/Core/Reproduce.cpp +++ b/lib/Core/Reproduce.cpp @@ -8,66 +8,14 @@ //===----------------------------------------------------------------------===// #include "lld/Core/Reproduce.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/Twine.h" #include "llvm/Option/Arg.h" #include "llvm/Support/Error.h" #include "llvm/Support/FileSystem.h" -#include "llvm/Support/Format.h" #include "llvm/Support/Path.h" using namespace lld; using namespace llvm; -using namespace sys; - -CpioFile::CpioFile(std::unique_ptr<raw_fd_ostream> OS, StringRef S) - : OS(std::move(OS)), Basename(S) {} - -ErrorOr<CpioFile *> CpioFile::create(StringRef OutputPath) { - std::string Path = (OutputPath + ".cpio").str(); - std::error_code EC; - auto OS = llvm::make_unique<raw_fd_ostream>(Path, EC, sys::fs::F_None); - if (EC) - return EC; - return new CpioFile(std::move(OS), path::filename(OutputPath)); -} - -static void writeMember(raw_fd_ostream &OS, StringRef Path, StringRef Data) { - // The c_dev/c_ino pair should be unique according to the spec, - // but no one seems to care. - OS << "070707"; // c_magic - OS << "000000"; // c_dev - OS << "000000"; // c_ino - OS << "100664"; // c_mode: C_ISREG | rw-rw-r-- - OS << "000000"; // c_uid - OS << "000000"; // c_gid - OS << "000001"; // c_nlink - OS << "000000"; // c_rdev - OS << "00000000000"; // c_mtime - OS << format("%06o", Path.size() + 1); // c_namesize - OS << format("%011o", Data.size()); // c_filesize - OS << Path << '\0'; // c_name - OS << Data; // c_filedata -} - -void CpioFile::append(StringRef Path, StringRef Data) { - if (!Seen.insert(Path).second) - return; - - // Construct an in-archive filename so that /home/foo/bar is stored - // as baz/home/foo/bar where baz is the basename of the output file. - // (i.e. in that case we are creating baz.cpio.) - SmallString<128> Fullpath; - path::append(Fullpath, Basename, Path); - - writeMember(*OS, convertToUnixPathSeparator(Fullpath), Data); - - // Print the trailer and seek back. - // This way we have a valid archive if we crash. - uint64_t Pos = OS->tell(); - writeMember(*OS, "TRAILER!!!", ""); - OS->seek(Pos); -} +using namespace llvm::sys; // Makes a given pathname an absolute path first, and then remove // beginning /. For example, "../foo.o" is converted to "home/john/foo.o", @@ -76,7 +24,7 @@ void CpioFile::append(StringRef Path, StringRef Data) { // a mess with backslash-as-escape and backslash-as-path-separator. std::string lld::relativeToRoot(StringRef Path) { SmallString<128> Abs = Path; - if (sys::fs::make_absolute(Abs)) + if (fs::make_absolute(Abs)) return Path; path::remove_dots(Abs, /*remove_dot_dot=*/true); @@ -107,7 +55,7 @@ std::string lld::rewritePath(StringRef S) { return S; } -std::string lld::stringize(opt::Arg *Arg) { +std::string lld::toString(opt::Arg *Arg) { std::string K = Arg->getSpelling(); if (Arg->getNumValues() == 0) return K; |