aboutsummaryrefslogtreecommitdiff
path: root/src/common/platform/win/StreamConvert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/platform/win/StreamConvert.cpp')
-rw-r--r--src/common/platform/win/StreamConvert.cpp29
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);
}