Mercurial > vba-linux
annotate src/win32/7zip/7z/CPP/7zip/Common/LimitedStreams.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
rev | line source |
---|---|
rlm@1 | 1 // LimitedStreams.cpp |
rlm@1 | 2 |
rlm@1 | 3 #include "StdAfx.h" |
rlm@1 | 4 |
rlm@1 | 5 #include "LimitedStreams.h" |
rlm@1 | 6 #include "../../Common/Defs.h" |
rlm@1 | 7 |
rlm@1 | 8 STDMETHODIMP CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *processedSize) |
rlm@1 | 9 { |
rlm@1 | 10 UInt32 realProcessedSize = 0; |
rlm@1 | 11 UInt32 sizeToRead = (UInt32)MyMin((_size - _pos), (UInt64)size); |
rlm@1 | 12 HRESULT result = S_OK; |
rlm@1 | 13 if (sizeToRead > 0) |
rlm@1 | 14 { |
rlm@1 | 15 result = _stream->Read(data, sizeToRead, &realProcessedSize); |
rlm@1 | 16 _pos += realProcessedSize; |
rlm@1 | 17 if (realProcessedSize == 0) |
rlm@1 | 18 _wasFinished = true; |
rlm@1 | 19 } |
rlm@1 | 20 if(processedSize != NULL) |
rlm@1 | 21 *processedSize = realProcessedSize; |
rlm@1 | 22 return result; |
rlm@1 | 23 } |
rlm@1 | 24 |
rlm@1 | 25 STDMETHODIMP CLimitedSequentialOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) |
rlm@1 | 26 { |
rlm@1 | 27 HRESULT result = S_OK; |
rlm@1 | 28 if (processedSize != NULL) |
rlm@1 | 29 *processedSize = 0; |
rlm@1 | 30 if (size > _size) |
rlm@1 | 31 { |
rlm@1 | 32 size = (UInt32)_size; |
rlm@1 | 33 if (size == 0) |
rlm@1 | 34 { |
rlm@1 | 35 _overflow = true; |
rlm@1 | 36 return E_FAIL; |
rlm@1 | 37 } |
rlm@1 | 38 } |
rlm@1 | 39 if (_stream) |
rlm@1 | 40 result = _stream->Write(data, size, &size); |
rlm@1 | 41 _size -= size; |
rlm@1 | 42 if (processedSize != NULL) |
rlm@1 | 43 *processedSize = size; |
rlm@1 | 44 return result; |
rlm@1 | 45 } |