Mercurial > vba-linux
view src/win32/7zip/7z/CPP/7zip/Common/StreamUtils.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 // StreamUtils.cpp3 #include "StdAfx.h"5 #include "StreamUtils.h"7 static const UInt32 kBlockSize = ((UInt32)1 << 31);9 HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *processedSize)10 {11 size_t size = *processedSize;12 *processedSize = 0;13 while (size != 0)14 {15 UInt32 curSize = (size < kBlockSize) ? (UInt32)size : kBlockSize;16 UInt32 processedSizeLoc;17 HRESULT res = stream->Read(data, curSize, &processedSizeLoc);18 *processedSize += processedSizeLoc;19 data = (void *)((Byte *)data + processedSizeLoc);20 size -= processedSizeLoc;21 RINOK(res);22 if (processedSizeLoc == 0)23 return S_OK;24 }25 return S_OK;26 }28 HRESULT ReadStream_FALSE(ISequentialInStream *stream, void *data, size_t size)29 {30 size_t processedSize = size;31 RINOK(ReadStream(stream, data, &processedSize));32 return (size == processedSize) ? S_OK : S_FALSE;33 }35 HRESULT ReadStream_FAIL(ISequentialInStream *stream, void *data, size_t size)36 {37 size_t processedSize = size;38 RINOK(ReadStream(stream, data, &processedSize));39 return (size == processedSize) ? S_OK : E_FAIL;40 }42 HRESULT WriteStream(ISequentialOutStream *stream, const void *data, size_t size)43 {44 while (size != 0)45 {46 UInt32 curSize = (size < kBlockSize) ? (UInt32)size : kBlockSize;47 UInt32 processedSizeLoc;48 HRESULT res = stream->Write(data, curSize, &processedSizeLoc);49 data = (const void *)((const Byte *)data + processedSizeLoc);50 size -= processedSizeLoc;51 RINOK(res);52 if (processedSizeLoc == 0)53 return E_FAIL;54 }55 return S_OK;56 }