aboutsummaryrefslogtreecommitdiff
path: root/src/common/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/platform')
-rw-r--r--src/common/platform/win/BridgeComStream.cpp26
-rw-r--r--src/common/platform/win/Win32FileStream.cpp21
2 files changed, 22 insertions, 25 deletions
diff --git a/src/common/platform/win/BridgeComStream.cpp b/src/common/platform/win/BridgeComStream.cpp
index eaa53b92..d324a4c2 100644
--- a/src/common/platform/win/BridgeComStream.cpp
+++ b/src/common/platform/win/BridgeComStream.cpp
@@ -50,15 +50,23 @@ HRESULT BridgeComStream::Write(const void *pv, ULONG cb, ULONG *pcbWritten) {
HRESULT BridgeComStream::Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin,
ULARGE_INTEGER *plibNewPosition) {
- io::Stream::SeekOrigin so =
- dwOrigin == STREAM_SEEK_SET
- ? io::Stream::SeekOrigin::Begin
- : (STREAM_SEEK_CUR ? io::Stream::SeekOrigin::Current
- : io::Stream::SeekOrigin::End);
-
- stream_->Seek(dlibMove.QuadPart, so);
- plibNewPosition->QuadPart = stream_->Tell();
-
+ io::Stream::SeekOrigin so;
+
+ switch (dwOrigin) {
+ case STREAM_SEEK_SET:
+ so = io::Stream::SeekOrigin::Begin;
+ break;
+ case STREAM_SEEK_CUR:
+ so = io::Stream::SeekOrigin::Current;
+ break;
+ case STREAM_SEEK_END:
+ so = io::Stream::SeekOrigin::End;
+ break;
+ default:
+ return STG_E_INVALIDFUNCTION;
+ };
+
+ plibNewPosition->QuadPart = stream_->Seek(dlibMove.QuadPart, so);
return S_OK;
}
diff --git a/src/common/platform/win/Win32FileStream.cpp b/src/common/platform/win/Win32FileStream.cpp
index 5997c570..ddf81c28 100644
--- a/src/common/platform/win/Win32FileStream.cpp
+++ b/src/common/platform/win/Win32FileStream.cpp
@@ -53,21 +53,7 @@ Win32FileStream::~Win32FileStream() {
bool Win32FileStream::CanSeek() { return true; }
-Index Win32FileStream::Tell() {
- CheckClosed();
-
- LARGE_INTEGER offset;
- offset.QuadPart = 0;
- LARGE_INTEGER file_pointer;
- if (::SetFilePointerEx(p_->handle, offset, &file_pointer, FILE_CURRENT) ==
- 0) {
- throw Win32Error(u"Failed to call SetFilePointerEx.");
- }
-
- return file_pointer.QuadPart;
-}
-
-void Win32FileStream::Seek(Index offset, SeekOrigin origin) {
+Index Win32FileStream::Seek(Index offset, SeekOrigin origin) {
CheckClosed();
DWORD dwMoveMethod = 0;
@@ -82,9 +68,12 @@ void Win32FileStream::Seek(Index offset, SeekOrigin origin) {
LARGE_INTEGER n_offset;
n_offset.QuadPart = offset;
- if (::SetFilePointerEx(p_->handle, n_offset, nullptr, dwMoveMethod) == 0) {
+ LARGE_INTEGER n_new_offset;
+ if (!::SetFilePointerEx(p_->handle, n_offset, &n_new_offset, dwMoveMethod)) {
throw Win32Error(u"Failed to call SetFilePointerEx.");
}
+
+ return n_new_offset.QuadPart;
}
bool Win32FileStream::CanRead() { return true; }