diff options
author | crupest <crupest@outlook.com> | 2022-05-10 11:02:56 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-05-10 11:02:56 +0800 |
commit | 58e37eee64b13df9cf24cdfc97906e19b2898869 (patch) | |
tree | 64caca951bb5996637238bc6931dceb548da0213 /src/common/platform/win/StreamConvert.cpp | |
parent | 8708a3d261c77c1728b770b846d1ecf25d6a8629 (diff) | |
download | cru-58e37eee64b13df9cf24cdfc97906e19b2898869.tar.gz cru-58e37eee64b13df9cf24cdfc97906e19b2898869.tar.bz2 cru-58e37eee64b13df9cf24cdfc97906e19b2898869.zip |
...
Diffstat (limited to 'src/common/platform/win/StreamConvert.cpp')
-rw-r--r-- | src/common/platform/win/StreamConvert.cpp | 29 |
1 files changed, 2 insertions, 27 deletions
diff --git a/src/common/platform/win/StreamConvert.cpp b/src/common/platform/win/StreamConvert.cpp index 8e2648c2..d547caa5 100644 --- a/src/common/platform/win/StreamConvert.cpp +++ b/src/common/platform/win/StreamConvert.cpp @@ -1,5 +1,6 @@ #include "cru/common/platform/win/StreamConvert.h" #include "BrigdeComStream.h" +#include "Win32FileStreamPrivate.h" #include "cru/common/Exception.h" #include "cru/common/io/MemoryStream.h" #include "cru/common/io/OpenFileFlag.h" @@ -19,33 +20,7 @@ IStream* ConvertStreamToComStream(io::Stream* stream) { reinterpret_cast<const BYTE*>(memory_stream->GetBuffer()), memory_stream->GetSize()); } else if (auto file_stream = dynamic_cast<Win32FileStream*>(stream)) { - auto path = file_stream->GetPath(); - auto flags = file_stream->GetOpenFileFlags(); - DWORD grfMode = STGM_SHARE_DENY_NONE | STGM_FAILIFTHERE; - if (flags & io::OpenFileFlags::Read) { - if (flags & io::OpenFileFlags::Write) { - grfMode |= STGM_READWRITE; - } else { - grfMode |= STGM_READ; - } - } else { - if (flags & io::OpenFileFlags::Write) { - grfMode |= STGM_WRITE; - } else { - throw Exception(u"Stream must be readable or writable."); - } - } - - IStream* result; - - ThrowIfFailed(SHCreateStreamOnFileEx( - path.WinCStr(), grfMode, FILE_ATTRIBUTE_NORMAL, FALSE, NULL, &result)); - - LARGE_INTEGER position; - position.QuadPart = stream->Tell(); - result->Seek(position, STREAM_SEEK_SET, NULL); - - return result; + return file_stream->GetPrivate_()->stream_; } else { return new BridgeComStream(stream); } |