aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-11-07 10:18:44 +0100
committerGitHub <[email protected]>2022-11-07 01:18:44 -0800
commitbb07e58a9c59705b54164b06bcbe40c052880d90 (patch)
tree2b691d876b232f5354459a9c4a5cb44c21d541a8 /zencore/iobuffer.cpp
parent0.1.8 (diff)
downloadzen-bb07e58a9c59705b54164b06bcbe40c052880d90.tar.xz
zen-bb07e58a9c59705b54164b06bcbe40c052880d90.zip
Support file reference in package message (#184)
* Fix packed message parsing for absolute path * Always enable are sharing when opening files as IoBuffers. * Allow control over sending partial files as localfile ref * Check "AcceptFlags" field in RPC message for allowing localfile ref in reply * make oplog entry add operations ZEN_DEBUG level logs * changelog
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp36
1 files changed, 9 insertions, 27 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp
index 177b7dfb6..16dd22a58 100644
--- a/zencore/iobuffer.cpp
+++ b/zencore/iobuffer.cpp
@@ -480,20 +480,16 @@ IoBufferBuilder::MakeFromFileHandle(void* FileHandle, uint64_t Offset, uint64_t
return IoBuffer(IoBuffer::BorrowedFile, FileHandle, Offset, Size);
}
-static IoBuffer
-MakeFromFileWithOptions(const std::filesystem::path& FileName, uint64_t Offset, uint64_t Size, bool UseShareDelete)
+IoBuffer
+IoBufferBuilder::MakeFromFile(const std::filesystem::path& FileName, uint64_t Offset, uint64_t Size)
{
uint64_t FileSize;
#if ZEN_PLATFORM_WINDOWS
CAtlFile DataFile;
- DWORD ShareOptions = FILE_SHARE_READ;
- if (UseShareDelete)
- {
- ShareOptions |= FILE_SHARE_DELETE;
- }
- HRESULT hRes = DataFile.Create(FileName.c_str(), GENERIC_READ, FILE_SHARE_READ | ShareOptions, OPEN_EXISTING);
+ DWORD ShareOptions = FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_DELETE | FILE_SHARE_READ;
+ HRESULT hRes = DataFile.Create(FileName.c_str(), GENERIC_READ, ShareOptions, OPEN_EXISTING);
if (FAILED(hRes))
{
@@ -502,12 +498,8 @@ MakeFromFileWithOptions(const std::filesystem::path& FileName, uint64_t Offset,
DataFile.GetSize((ULONGLONG&)FileSize);
#else
- int Flags = O_RDONLY;
- if (UseShareDelete)
- {
- Flags |= O_CLOEXEC;
- }
- int Fd = open(FileName.c_str(), Flags);
+ int Flags = O_RDONLY | O_CLOEXEC;
+ int Fd = open(FileName.c_str(), Flags);
if (Fd < 0)
{
return {};
@@ -539,7 +531,9 @@ MakeFromFileWithOptions(const std::filesystem::path& FileName, uint64_t Offset,
#if ZEN_PLATFORM_WINDOWS
void* Fd = DataFile.Detach();
#endif
- return IoBuffer(IoBuffer::File, (void*)uintptr_t(Fd), Offset, Size);
+ IoBuffer Iob(IoBuffer::File, (void*)uintptr_t(Fd), Offset, Size);
+ Iob.m_Core->SetIsWholeFile(Offset == 0 && Size == FileSize);
+ return Iob;
}
#if !ZEN_PLATFORM_WINDOWS
@@ -551,18 +545,6 @@ MakeFromFileWithOptions(const std::filesystem::path& FileName, uint64_t Offset,
}
IoBuffer
-IoBufferBuilder::MakeFromFileWithSharedDelete(const std::filesystem::path& FileName)
-{
- return MakeFromFileWithOptions(FileName, 0, ~0ull, true);
-}
-
-IoBuffer
-IoBufferBuilder::MakeFromFile(const std::filesystem::path& FileName, uint64_t Offset, uint64_t Size)
-{
- return MakeFromFileWithOptions(FileName, Offset, Size, false);
-}
-
-IoBuffer
IoBufferBuilder::MakeFromTemporaryFile(const std::filesystem::path& FileName)
{
uint64_t FileSize;