Convert FileOutputBuffer to Expected. NFC.
llvm-svn: 317649
This commit is contained in:
parent
b8c9e2aae5
commit
e0df357dbd
|
@ -17,7 +17,7 @@
|
|||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -37,7 +37,7 @@ public:
|
|||
/// Factory method to create an OutputBuffer object which manages a read/write
|
||||
/// buffer of the specified size. When committed, the buffer will be written
|
||||
/// to the file at the specified path.
|
||||
static ErrorOr<std::unique_ptr<FileOutputBuffer>>
|
||||
static Expected<std::unique_ptr<FileOutputBuffer>>
|
||||
create(StringRef FilePath, size_t Size, unsigned Flags = 0);
|
||||
|
||||
/// Returns a pointer to the start of the buffer.
|
||||
|
|
|
@ -176,9 +176,8 @@ Error PDBFileBuilder::commit(StringRef Filename) {
|
|||
|
||||
uint64_t Filesize = Layout.SB->BlockSize * Layout.SB->NumBlocks;
|
||||
auto OutFileOrError = FileOutputBuffer::create(Filename, Filesize);
|
||||
if (OutFileOrError.getError())
|
||||
return llvm::make_error<pdb::GenericError>(generic_error_code::invalid_path,
|
||||
Filename);
|
||||
if (auto E = OutFileOrError.takeError())
|
||||
return E;
|
||||
FileBufferByteStream Buffer(std::move(*OutFileOrError),
|
||||
llvm::support::little);
|
||||
BinaryStreamWriter Writer(Buffer);
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
std::unique_ptr<fs::mapped_file_region> Buf)
|
||||
: FileOutputBuffer(Path), Buffer(std::move(Buf)), TempPath(TempPath) {}
|
||||
|
||||
static ErrorOr<std::unique_ptr<OnDiskBuffer>>
|
||||
static Expected<std::unique_ptr<OnDiskBuffer>>
|
||||
create(StringRef Path, size_t Size, unsigned Mode);
|
||||
|
||||
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer->data(); }
|
||||
|
@ -78,13 +78,13 @@ public:
|
|||
InMemoryBuffer(StringRef Path, MemoryBlock Buf, unsigned Mode)
|
||||
: FileOutputBuffer(Path), Buffer(Buf), Mode(Mode) {}
|
||||
|
||||
static ErrorOr<std::unique_ptr<InMemoryBuffer>>
|
||||
static Expected<std::unique_ptr<InMemoryBuffer>>
|
||||
create(StringRef Path, size_t Size, unsigned Mode) {
|
||||
std::error_code EC;
|
||||
MemoryBlock MB = Memory::allocateMappedMemory(
|
||||
Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
|
||||
if (EC)
|
||||
return EC;
|
||||
return errorCodeToError(EC);
|
||||
return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
|
||||
}
|
||||
|
||||
|
@ -111,13 +111,13 @@ private:
|
|||
unsigned Mode;
|
||||
};
|
||||
|
||||
ErrorOr<std::unique_ptr<OnDiskBuffer>>
|
||||
Expected<std::unique_ptr<OnDiskBuffer>>
|
||||
OnDiskBuffer::create(StringRef Path, size_t Size, unsigned Mode) {
|
||||
// Create new file in same directory but with random name.
|
||||
SmallString<128> TempPath;
|
||||
int FD;
|
||||
if (auto EC = fs::createUniqueFile(Path + ".tmp%%%%%%%", FD, TempPath, Mode))
|
||||
return EC;
|
||||
return errorCodeToError(EC);
|
||||
|
||||
sys::RemoveFileOnSignal(TempPath);
|
||||
|
||||
|
@ -128,7 +128,7 @@ OnDiskBuffer::create(StringRef Path, size_t Size, unsigned Mode) {
|
|||
// pretty slow just like it writes specified amount of bytes,
|
||||
// so we should avoid calling that function.
|
||||
if (auto EC = fs::resize_file(FD, Size))
|
||||
return EC;
|
||||
return errorCodeToError(EC);
|
||||
#endif
|
||||
|
||||
// Mmap it.
|
||||
|
@ -137,12 +137,12 @@ OnDiskBuffer::create(StringRef Path, size_t Size, unsigned Mode) {
|
|||
FD, fs::mapped_file_region::readwrite, Size, 0, EC);
|
||||
close(FD);
|
||||
if (EC)
|
||||
return EC;
|
||||
return errorCodeToError(EC);
|
||||
return llvm::make_unique<OnDiskBuffer>(Path, TempPath, std::move(MappedFile));
|
||||
}
|
||||
|
||||
// Create an instance of FileOutputBuffer.
|
||||
ErrorOr<std::unique_ptr<FileOutputBuffer>>
|
||||
Expected<std::unique_ptr<FileOutputBuffer>>
|
||||
FileOutputBuffer::create(StringRef Path, size_t Size, unsigned Flags) {
|
||||
unsigned Mode = fs::all_read | fs::all_write;
|
||||
if (Flags & F_executable)
|
||||
|
@ -161,7 +161,7 @@ FileOutputBuffer::create(StringRef Path, size_t Size, unsigned Flags) {
|
|||
// destination file and write to it on commit().
|
||||
switch (Stat.type()) {
|
||||
case fs::file_type::directory_file:
|
||||
return errc::is_a_directory;
|
||||
return errorCodeToError(errc::is_a_directory);
|
||||
case fs::file_type::regular_file:
|
||||
case fs::file_type::file_not_found:
|
||||
case fs::file_type::status_error:
|
||||
|
|
|
@ -202,7 +202,7 @@ int main(int argc_, const char *argv_[]) {
|
|||
auto FileOrErr =
|
||||
FileOutputBuffer::create(OutputFile, OutputBuffer->getBufferSize());
|
||||
if (!FileOrErr)
|
||||
reportError(OutputFile, FileOrErr.getError());
|
||||
reportError(OutputFile, errorToErrorCode(FileOrErr.takeError()));
|
||||
std::unique_ptr<FileOutputBuffer> FileBuffer = std::move(*FileOrErr);
|
||||
std::copy(OutputBuffer->getBufferStart(), OutputBuffer->getBufferEnd(),
|
||||
FileBuffer->getBufferStart());
|
||||
|
|
|
@ -146,10 +146,10 @@ int main(int argc, const char **argv) {
|
|||
std::unique_ptr<MemoryBuffer> OutputBuffer = Merger.getMergedManifest();
|
||||
if (!OutputBuffer)
|
||||
reportError("empty manifest not written");
|
||||
ErrorOr<std::unique_ptr<FileOutputBuffer>> FileOrErr =
|
||||
Expected<std::unique_ptr<FileOutputBuffer>> FileOrErr =
|
||||
FileOutputBuffer::create(OutputFile, OutputBuffer->getBufferSize());
|
||||
if (!FileOrErr)
|
||||
reportError(OutputFile, FileOrErr.getError());
|
||||
reportError(OutputFile, errorToErrorCode(FileOrErr.takeError()));
|
||||
std::unique_ptr<FileOutputBuffer> FileBuffer = std::move(*FileOrErr);
|
||||
std::copy(OutputBuffer->getBufferStart(), OutputBuffer->getBufferEnd(),
|
||||
FileBuffer->getBufferStart());
|
||||
|
|
|
@ -113,10 +113,10 @@ bool OnlyKeepDWOPred(const Object<ELFT> &Obj, const SectionBase &Sec) {
|
|||
template <class ELFT>
|
||||
void WriteObjectFile(const Object<ELFT> &Obj, StringRef File) {
|
||||
std::unique_ptr<FileOutputBuffer> Buffer;
|
||||
ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
|
||||
Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
|
||||
FileOutputBuffer::create(File, Obj.totalSize(),
|
||||
FileOutputBuffer::F_executable);
|
||||
if (BufferOrErr.getError())
|
||||
if (BufferOrErr.takeError())
|
||||
error("failed to open " + OutputFilename);
|
||||
else
|
||||
Buffer = std::move(*BufferOrErr);
|
||||
|
|
Loading…
Reference in New Issue