aboutsummaryrefslogtreecommitdiff
path: root/zenstore/basicfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zenstore/basicfile.cpp')
-rw-r--r--zenstore/basicfile.cpp30
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()