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 }