StreamUtils.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // StreamUtils.cpp
  2. #include "StdAfx.h"
  3. #include "../../Common/MyCom.h"
  4. #include "StreamUtils.h"
  5. HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize)
  6. {
  7. if (processedSize != 0)
  8. *processedSize = 0;
  9. while(size != 0)
  10. {
  11. UInt32 processedSizeLoc;
  12. HRESULT res = stream->Read(data, size, &processedSizeLoc);
  13. if (processedSize != 0)
  14. *processedSize += processedSizeLoc;
  15. data = (Byte *)((Byte *)data + processedSizeLoc);
  16. size -= processedSizeLoc;
  17. RINOK(res);
  18. if (processedSizeLoc == 0)
  19. return S_OK;
  20. }
  21. return S_OK;
  22. }
  23. HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize)
  24. {
  25. if (processedSize != 0)
  26. *processedSize = 0;
  27. while(size != 0)
  28. {
  29. UInt32 processedSizeLoc;
  30. HRESULT res = stream->Write(data, size, &processedSizeLoc);
  31. if (processedSize != 0)
  32. *processedSize += processedSizeLoc;
  33. data = (const void *)((const Byte *)data + processedSizeLoc);
  34. size -= processedSizeLoc;
  35. RINOK(res);
  36. if (processedSizeLoc == 0)
  37. return E_FAIL;
  38. }
  39. return S_OK;
  40. }