xref: /third_party/lzma/CPP/7zip/Common/OffsetStream.cpp (revision 370b324c)
  • Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/lzma/CPP/7zip/Common/
1// OffsetStream.cpp
2
3#include "StdAfx.h"
4
5#include "OffsetStream.h"
6
7HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset)
8{
9  _offset = offset;
10  _stream = stream;
11  return _stream->Seek((Int64)offset, STREAM_SEEK_SET, NULL);
12}
13
14Z7_COM7F_IMF(COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
15{
16  return _stream->Write(data, size, processedSize);
17}
18
19Z7_COM7F_IMF(COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
20{
21  if (seekOrigin == STREAM_SEEK_SET)
22  {
23    if (offset < 0)
24      return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
25    offset += _offset;
26  }
27  UInt64 absoluteNewPosition = 0; // =0 for gcc-10
28  const HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition);
29  if (newPosition)
30    *newPosition = absoluteNewPosition - _offset;
31  return result;
32}
33
34Z7_COM7F_IMF(COffsetOutStream::SetSize(UInt64 newSize))
35{
36  return _stream->SetSize(_offset + newSize);
37}
38

Indexes created Thu Nov 07 10:32:03 CST 2024