// StreamUtils.cpp | |
#include "StdAfx.h" | |
#include "../../Common/MyCom.h" | |
#include "StreamUtils.h" | |
HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize) | |
{ | |
if (processedSize != 0) | |
*processedSize = 0; | |
while(size != 0) | |
{ | |
UInt32 processedSizeLoc; | |
HRESULT res = stream->Read(data, size, &processedSizeLoc); | |
if (processedSize != 0) | |
*processedSize += processedSizeLoc; | |
data = (Byte *)((Byte *)data + processedSizeLoc); | |
size -= processedSizeLoc; | |
RINOK(res); | |
if (processedSizeLoc == 0) | |
return S_OK; | |
} | |
return S_OK; | |
} | |
HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize) | |
{ | |
if (processedSize != 0) | |
*processedSize = 0; | |
while(size != 0) | |
{ | |
UInt32 processedSizeLoc; | |
HRESULT res = stream->Write(data, size, &processedSizeLoc); | |
if (processedSize != 0) | |
*processedSize += processedSizeLoc; | |
data = (const void *)((const Byte *)data + processedSizeLoc); | |
size -= processedSizeLoc; | |
RINOK(res); | |
if (processedSizeLoc == 0) | |
break; | |
} | |
return S_OK; | |
} |