1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/other-licenses/7zstub/src/7zip/Common/StreamUtils.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,44 @@ 1.4 +// StreamUtils.cpp 1.5 + 1.6 +#include "StdAfx.h" 1.7 + 1.8 +#include "../../Common/MyCom.h" 1.9 +#include "StreamUtils.h" 1.10 + 1.11 +HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize) 1.12 +{ 1.13 + if (processedSize != 0) 1.14 + *processedSize = 0; 1.15 + while(size != 0) 1.16 + { 1.17 + UInt32 processedSizeLoc; 1.18 + HRESULT res = stream->Read(data, size, &processedSizeLoc); 1.19 + if (processedSize != 0) 1.20 + *processedSize += processedSizeLoc; 1.21 + data = (Byte *)((Byte *)data + processedSizeLoc); 1.22 + size -= processedSizeLoc; 1.23 + RINOK(res); 1.24 + if (processedSizeLoc == 0) 1.25 + return S_OK; 1.26 + } 1.27 + return S_OK; 1.28 +} 1.29 + 1.30 +HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize) 1.31 +{ 1.32 + if (processedSize != 0) 1.33 + *processedSize = 0; 1.34 + while(size != 0) 1.35 + { 1.36 + UInt32 processedSizeLoc; 1.37 + HRESULT res = stream->Write(data, size, &processedSizeLoc); 1.38 + if (processedSize != 0) 1.39 + *processedSize += processedSizeLoc; 1.40 + data = (const void *)((const Byte *)data + processedSizeLoc); 1.41 + size -= processedSizeLoc; 1.42 + RINOK(res); 1.43 + if (processedSizeLoc == 0) 1.44 + break; 1.45 + } 1.46 + return S_OK; 1.47 +}