aboutsummaryrefslogtreecommitdiff
path: root/src/base/platform/win/BridgeComStream.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2026-03-07 20:42:37 +0800
committerYuqian Yang <crupest@crupest.life>2026-03-07 20:42:37 +0800
commit38756822825e20eca3b9e01b735946175223d692 (patch)
treefc2a495bfc0e082d5ed9a1642278ae6467fe2742 /src/base/platform/win/BridgeComStream.cpp
parent924f4b472712d0cfc55b81dcb3eaed3f8a478288 (diff)
downloadcru-38756822825e20eca3b9e01b735946175223d692.tar.gz
cru-38756822825e20eca3b9e01b735946175223d692.tar.bz2
cru-38756822825e20eca3b9e01b735946175223d692.zip
Refactor stream.
Diffstat (limited to 'src/base/platform/win/BridgeComStream.cpp')
-rw-r--r--src/base/platform/win/BridgeComStream.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/base/platform/win/BridgeComStream.cpp b/src/base/platform/win/BridgeComStream.cpp
index c6987ab2..921209b4 100644
--- a/src/base/platform/win/BridgeComStream.cpp
+++ b/src/base/platform/win/BridgeComStream.cpp
@@ -2,7 +2,7 @@
#include "cru/base/io/Stream.h"
namespace cru::platform::win {
-BridgeComStream::BridgeComStream(io::Stream *stream)
+BridgeComStream::BridgeComStream(io::Stream* stream)
: stream_(stream), ref_count_(1) {}
BridgeComStream::~BridgeComStream() {}
@@ -20,17 +20,17 @@ ULONG BridgeComStream::Release() {
return ref_count_;
}
-HRESULT BridgeComStream::QueryInterface(const IID &riid, void **ppvObject) {
+HRESULT BridgeComStream::QueryInterface(const IID& riid, void** ppvObject) {
if (riid == IID_IStream) {
- *ppvObject = static_cast<IStream *>(this);
+ *ppvObject = static_cast<IStream*>(this);
AddRef();
return S_OK;
} else if (riid == IID_ISequentialStream) {
- *ppvObject = static_cast<ISequentialStream *>(this);
+ *ppvObject = static_cast<ISequentialStream*>(this);
AddRef();
return S_OK;
} else if (riid == IID_IUnknown) {
- *ppvObject = static_cast<IUnknown *>(this);
+ *ppvObject = static_cast<IUnknown*>(this);
AddRef();
return S_OK;
} else {
@@ -38,18 +38,22 @@ HRESULT BridgeComStream::QueryInterface(const IID &riid, void **ppvObject) {
}
}
-HRESULT BridgeComStream::Read(void *pv, ULONG cb, ULONG *pcbRead) {
- *pcbRead = stream_->Read(static_cast<std::byte *>(pv), cb);
- return S_OK;
+HRESULT BridgeComStream::Read(void* pv, ULONG cb, ULONG* pcbRead) {
+ auto count = stream_->Read(static_cast<std::byte*>(pv), cb);
+ if (count == cru::io::Stream::kEOF) {
+ count = 0;
+ }
+ *pcbRead = count;
+ return cb == count ? S_OK : S_FALSE;
}
-HRESULT BridgeComStream::Write(const void *pv, ULONG cb, ULONG *pcbWritten) {
- *pcbWritten = stream_->Write(static_cast<const std::byte *>(pv), cb);
+HRESULT BridgeComStream::Write(const void* pv, ULONG cb, ULONG* pcbWritten) {
+ *pcbWritten = stream_->Write(static_cast<const std::byte*>(pv), cb);
return S_OK;
}
HRESULT BridgeComStream::Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin,
- ULARGE_INTEGER *plibNewPosition) {
+ ULARGE_INTEGER* plibNewPosition) {
io::Stream::SeekOrigin so;
switch (dwOrigin) {
@@ -74,9 +78,9 @@ HRESULT BridgeComStream::SetSize(ULARGE_INTEGER libNewSize) {
return E_NOTIMPL;
}
-HRESULT BridgeComStream::CopyTo(IStream *pstm, ULARGE_INTEGER cb,
- ULARGE_INTEGER *pcbRead,
- ULARGE_INTEGER *pcbWritten) {
+HRESULT BridgeComStream::CopyTo(IStream* pstm, ULARGE_INTEGER cb,
+ ULARGE_INTEGER* pcbRead,
+ ULARGE_INTEGER* pcbWritten) {
return E_NOTIMPL;
}
@@ -94,11 +98,11 @@ HRESULT BridgeComStream::UnlockRegion(ULARGE_INTEGER libOffset,
return S_OK;
}
-HRESULT BridgeComStream::Stat(STATSTG *pstatstg, DWORD grfStatFlag) {
+HRESULT BridgeComStream::Stat(STATSTG* pstatstg, DWORD grfStatFlag) {
return E_NOTIMPL;
}
-HRESULT BridgeComStream::Clone(IStream **ppstm) {
+HRESULT BridgeComStream::Clone(IStream** ppstm) {
*ppstm = new BridgeComStream(stream_);
return S_OK;
}