diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-11 20:12:55 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-11 20:12:55 +0000 |
commit | 7eb1f1856c3b6549544256da9c4b881f695903cc (patch) | |
tree | 09f03a0f890d27db3e57ff0994cc13d82506c69f /llvm/lib/Support/Windows/Path.inc | |
parent | 01c73610d0fd4f12f19f44083437106957a737c4 (diff) | |
download | bcm5719-llvm-7eb1f1856c3b6549544256da9c4b881f695903cc.tar.gz bcm5719-llvm-7eb1f1856c3b6549544256da9c4b881f695903cc.zip |
Remove a convoluted way of calling close by moving the call to the only caller.
As a bonus we can actually check the return value.
llvm-svn: 224046
Diffstat (limited to 'llvm/lib/Support/Windows/Path.inc')
-rw-r--r-- | llvm/lib/Support/Windows/Path.inc | 46 |
1 files changed, 7 insertions, 39 deletions
diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc index eebee204a1e..20eae54b181 100644 --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -467,13 +467,12 @@ std::error_code setLastModificationAndAccessTime(int FD, TimeValue Time) { return std::error_code(); } -std::error_code mapped_file_region::init(int FD, bool CloseFD, uint64_t Offset) { +std::error_code mapped_file_region::init(int FD, uint64_t Offset, + mapmode Mode) { FileDescriptor = FD; // Make sure that the requested size fits within SIZE_T. if (Size > std::numeric_limits<SIZE_T>::max()) { if (FileDescriptor) { - if (CloseFD) - _close(FileDescriptor); } else ::CloseHandle(FileHandle); return make_error_code(errc::invalid_argument); @@ -494,8 +493,6 @@ std::error_code mapped_file_region::init(int FD, bool CloseFD, uint64_t Offset) if (FileMappingHandle == NULL) { std::error_code ec = windows_error(GetLastError()); if (FileDescriptor) { - if (CloseFD) - _close(FileDescriptor); } else ::CloseHandle(FileHandle); return ec; @@ -516,8 +513,6 @@ std::error_code mapped_file_region::init(int FD, bool CloseFD, uint64_t Offset) std::error_code ec = windows_error(GetLastError()); ::CloseHandle(FileMappingHandle); if (FileDescriptor) { - if (CloseFD) - _close(FileDescriptor); } else ::CloseHandle(FileHandle); return ec; @@ -531,8 +526,6 @@ std::error_code mapped_file_region::init(int FD, bool CloseFD, uint64_t Offset) ::UnmapViewOfFile(Mapping); ::CloseHandle(FileMappingHandle); if (FileDescriptor) { - if (CloseFD) - _close(FileDescriptor); } else ::CloseHandle(FileHandle); return ec; @@ -544,35 +537,23 @@ std::error_code mapped_file_region::init(int FD, bool CloseFD, uint64_t Offset) // alive. ::CloseHandle(FileMappingHandle); if (FileDescriptor) { - if (CloseFD) - _close(FileDescriptor); // Also closes FileHandle. } else ::CloseHandle(FileHandle); return std::error_code(); } -mapped_file_region::mapped_file_region(int fd, - bool closefd, - mapmode mode, - uint64_t length, - uint64_t offset, - std::error_code &ec) - : Mode(mode) - , Size(length) - , Mapping() - , FileDescriptor(fd) - , FileHandle(INVALID_HANDLE_VALUE) - , FileMappingHandle() { +mapped_file_region::mapped_file_region(int fd, mapmode mode, uint64_t length, + uint64_t offset, std::error_code &ec) + : Size(length), Mapping(), FileDescriptor(fd), + FileHandle(INVALID_HANDLE_VALUE), FileMappingHandle() { FileHandle = reinterpret_cast<HANDLE>(_get_osfhandle(fd)); if (FileHandle == INVALID_HANDLE_VALUE) { - if (closefd) - _close(FileDescriptor); FileDescriptor = 0; ec = make_error_code(errc::bad_file_descriptor); return; } - ec = init(FileDescriptor, closefd, offset); + ec = init(FileDescriptor, offset, mode); if (ec) { Mapping = FileMappingHandle = 0; FileHandle = INVALID_HANDLE_VALUE; @@ -585,25 +566,12 @@ mapped_file_region::~mapped_file_region() { ::UnmapViewOfFile(Mapping); } -mapped_file_region::mapped_file_region(mapped_file_region &&other) - : Mode(other.Mode) - , Size(other.Size) - , Mapping(other.Mapping) - , FileDescriptor(other.FileDescriptor) - , FileHandle(other.FileHandle) - , FileMappingHandle(other.FileMappingHandle) { - other.Mapping = other.FileMappingHandle = 0; - other.FileHandle = INVALID_HANDLE_VALUE; - other.FileDescriptor = 0; -} - uint64_t mapped_file_region::size() const { assert(Mapping && "Mapping failed but used anyway!"); return Size; } char *mapped_file_region::data() const { - assert(Mode != readonly && "Cannot get non-const data for readonly mapping!"); assert(Mapping && "Mapping failed but used anyway!"); return reinterpret_cast<char*>(Mapping); } |