diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-25 13:17:13 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:29:28 +0200 |
| commit | b4fab3c2d5ff2426489d42ad07f302f90587cc28 (patch) | |
| tree | d4deee1446e30eda1e26750188f212c406e34bc7 /zenstore/basicfile.cpp | |
| parent | clean up old zen cache by default (diff) | |
| download | zen-b4fab3c2d5ff2426489d42ad07f302f90587cc28.tar.xz zen-b4fab3c2d5ff2426489d42ad07f302f90587cc28.zip | |
cleanup
Diffstat (limited to 'zenstore/basicfile.cpp')
| -rw-r--r-- | zenstore/basicfile.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/zenstore/basicfile.cpp b/zenstore/basicfile.cpp index 44a7fc77f..0d410c745 100644 --- a/zenstore/basicfile.cpp +++ b/zenstore/basicfile.cpp @@ -142,33 +142,27 @@ BasicFile::Close() void BasicFile::Read(void* Data, uint64_t BytesToRead, uint64_t FileOffset) { - const uint64_t MaxChunkSize = 2u * 1024 * 1024 * 1024; - uint64_t TotalFileSize = FileSize(); - ZEN_ASSERT((FileOffset + BytesToRead) <= TotalFileSize); + const uint64_t MaxChunkSize = 2u * 1024 * 1024 * 1024; while (BytesToRead) { const uint64_t NumberOfBytesToRead = Min(BytesToRead, MaxChunkSize); - uint64_t NumberOfBytesRead; #if ZEN_PLATFORM_WINDOWS OVERLAPPED Ovl{}; Ovl.Offset = DWORD(FileOffset & 0xffff'ffffu); Ovl.OffsetHigh = DWORD(FileOffset >> 32); - ZEN_ASSERT((FileOffset + NumberOfBytesToRead) <= TotalFileSize); DWORD dwNumberOfBytesRead = 0; BOOL Success = ::ReadFile(m_FileHandle, Data, DWORD(NumberOfBytesToRead), &dwNumberOfBytesRead, &Ovl); - ZEN_ASSERT((dwNumberOfBytesRead <= NumberOfBytesToRead) && (dwNumberOfBytesRead > 0)); - NumberOfBytesRead = dwNumberOfBytesRead; + ZEN_ASSERT(dwNumberOfBytesRead == NumberOfBytesToRead); #else static_assert(sizeof(off_t) >= sizeof(uint64_t), "sizeof(off_t) does not support large files"); - int Fd = int(uintptr_t(m_FileHandle)); - int BytesRead = pread(Fd, Data, NumberOfBytesToRead, FileOffset); - bool Success = (BytesRead > 0); - NumberOfBytesRead = static_cast<uint64_t>(BytesRead); + int Fd = int(uintptr_t(m_FileHandle)); + int BytesRead = pread(Fd, Data, NumberOfBytesToRead, FileOffset); + bool Success = (BytesRead > 0); #endif if (!Success) @@ -176,9 +170,9 @@ BasicFile::Read(void* Data, uint64_t BytesToRead, uint64_t FileOffset) ThrowLastError(fmt::format("Failed to read from file '{}'", zen::PathFromHandle(m_FileHandle))); } - BytesToRead -= NumberOfBytesRead; - FileOffset += NumberOfBytesRead; - Data = reinterpret_cast<uint8_t*>(Data) + NumberOfBytesRead; + BytesToRead -= NumberOfBytesToRead; + FileOffset += NumberOfBytesToRead; + Data = reinterpret_cast<uint8_t*>(Data) + NumberOfBytesToRead; } } @@ -366,6 +360,14 @@ BasicFile::MarkAsDeleteOnClose(std::error_code& Ec) #endif } +void* +BasicFile::Detach() +{ + void* FileHandle = m_FileHandle; + m_FileHandle = 0; + return FileHandle; +} + ////////////////////////////////////////////////////////////////////////// TemporaryFile::~TemporaryFile() |