Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
michael@0 | 1 | // StreamUtils.cpp |
michael@0 | 2 | |
michael@0 | 3 | #include "StdAfx.h" |
michael@0 | 4 | |
michael@0 | 5 | #include "../../Common/MyCom.h" |
michael@0 | 6 | #include "StreamUtils.h" |
michael@0 | 7 | |
michael@0 | 8 | HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize) |
michael@0 | 9 | { |
michael@0 | 10 | if (processedSize != 0) |
michael@0 | 11 | *processedSize = 0; |
michael@0 | 12 | while(size != 0) |
michael@0 | 13 | { |
michael@0 | 14 | UInt32 processedSizeLoc; |
michael@0 | 15 | HRESULT res = stream->Read(data, size, &processedSizeLoc); |
michael@0 | 16 | if (processedSize != 0) |
michael@0 | 17 | *processedSize += processedSizeLoc; |
michael@0 | 18 | data = (Byte *)((Byte *)data + processedSizeLoc); |
michael@0 | 19 | size -= processedSizeLoc; |
michael@0 | 20 | RINOK(res); |
michael@0 | 21 | if (processedSizeLoc == 0) |
michael@0 | 22 | return S_OK; |
michael@0 | 23 | } |
michael@0 | 24 | return S_OK; |
michael@0 | 25 | } |
michael@0 | 26 | |
michael@0 | 27 | HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize) |
michael@0 | 28 | { |
michael@0 | 29 | if (processedSize != 0) |
michael@0 | 30 | *processedSize = 0; |
michael@0 | 31 | while(size != 0) |
michael@0 | 32 | { |
michael@0 | 33 | UInt32 processedSizeLoc; |
michael@0 | 34 | HRESULT res = stream->Write(data, size, &processedSizeLoc); |
michael@0 | 35 | if (processedSize != 0) |
michael@0 | 36 | *processedSize += processedSizeLoc; |
michael@0 | 37 | data = (const void *)((const Byte *)data + processedSizeLoc); |
michael@0 | 38 | size -= processedSizeLoc; |
michael@0 | 39 | RINOK(res); |
michael@0 | 40 | if (processedSizeLoc == 0) |
michael@0 | 41 | break; |
michael@0 | 42 | } |
michael@0 | 43 | return S_OK; |
michael@0 | 44 | } |