mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224046 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user