diff options
Diffstat (limited to 'zencore')
| -rw-r--r-- | zencore/compactbinarypackage.cpp | 5 | ||||
| -rw-r--r-- | zencore/include/zencore/iobuffer.h | 3 | ||||
| -rw-r--r-- | zencore/include/zencore/sharedbuffer.h | 3 | ||||
| -rw-r--r-- | zencore/iobuffer.cpp | 35 |
4 files changed, 44 insertions, 2 deletions
diff --git a/zencore/compactbinarypackage.cpp b/zencore/compactbinarypackage.cpp index f84137ff6..262b6ecba 100644 --- a/zencore/compactbinarypackage.cpp +++ b/zencore/compactbinarypackage.cpp @@ -54,7 +54,10 @@ CbAttachment::CbAttachment(SharedBuffer InBuffer, const IoHash* const InHash) : Hash = *InHash; if (Buffer.GetSize()) { - ZEN_ASSERT_SLOW(Hash == IoHash::HashMemory(Buffer.GetData(), Buffer.GetSize())); + // This is disabled for now as it forces disk-based attachments to get mapped which + // then prevents us from making them delete themselves on close + + // ZEN_ASSERT_SLOW(Hash == IoHash::HashMemory(Buffer.GetData(), Buffer.GetSize())); } else { diff --git a/zencore/include/zencore/iobuffer.h b/zencore/include/zencore/iobuffer.h index f38af3c27..7e7182997 100644 --- a/zencore/include/zencore/iobuffer.h +++ b/zencore/include/zencore/iobuffer.h @@ -269,6 +269,8 @@ public: private: RefPtr<IoBufferCore> m_Core = new IoBufferCore; + IoBuffer(IoBufferCore* Core) : m_Core(Core) {} + friend class SharedBuffer; }; @@ -276,6 +278,7 @@ class IoBufferBuilder { public: ZENCORE_API static IoBuffer MakeFromFile(const wchar_t* FileName, uint64_t Offset = 0, uint64_t Size = ~0ull); + ZENCORE_API static IoBuffer MakeFromTemporaryFile(const wchar_t* FileName, uint64_t Offset = 0, uint64_t Size = ~0ull); ZENCORE_API static IoBuffer MakeFromFileHandle(void* FileHandle, uint64_t Offset = 0, uint64_t Size = ~0ull); inline static IoBuffer MakeCloneFromMemory(const void* Ptr, size_t Sz) { return IoBuffer(IoBuffer::Clone, Ptr, Sz); } diff --git a/zencore/include/zencore/sharedbuffer.h b/zencore/include/zencore/sharedbuffer.h index 7f9c61adb..cdcf66da4 100644 --- a/zencore/include/zencore/sharedbuffer.h +++ b/zencore/include/zencore/sharedbuffer.h @@ -101,7 +101,8 @@ public: } } - operator MemoryView() const { return GetView(); } + operator MemoryView() const { return GetView(); } + inline IoBuffer AsIoBuffer() const { return IoBuffer(m_Buffer); } SharedBuffer& operator=(UniqueBuffer&& Rhs) { diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp index ec5d599b4..e74287c48 100644 --- a/zencore/iobuffer.cpp +++ b/zencore/iobuffer.cpp @@ -332,6 +332,41 @@ IoBufferBuilder::MakeFromFile(const wchar_t* FileName, uint64_t Offset, uint64_t return {}; } +IoBuffer +IoBufferBuilder::MakeFromTemporaryFile(const wchar_t* FileName, uint64_t Offset, uint64_t Size) +{ + CAtlFile DataFile; + + // We need to open with DELETE since this is used for the case + // when a file has been written to a staging directory, and is going + // to be moved in place. + + HRESULT hRes = DataFile.Create(FileName, GENERIC_READ | DELETE, FILE_SHARE_READ | FILE_SHARE_DELETE, OPEN_EXISTING); + + if (SUCCEEDED(hRes)) + { + ULONGLONG FileSize; + DataFile.GetSize(FileSize); + + if (Size == ~0ull) + { + Size = FileSize; + } + else + { + // Clamp size + if ((Offset + Size) > FileSize) + { + Size = FileSize - Offset; + } + } + + return IoBuffer(IoBuffer::File, DataFile.Detach(), Offset, Size); + } + + return {}; +} + ////////////////////////////////////////////////////////////////////////// void |