inputStreamMAPIAdapter.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright 2005 - 2016 Zarafa and its licensors
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Affero General Public License, version 3,
  6. * as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU Affero General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU Affero General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. */
  17. #include <kopano/platform.h>
  18. #include "inputStreamMAPIAdapter.h"
  19. namespace KC {
  20. inputStreamMAPIAdapter::inputStreamMAPIAdapter(IStream *lpStream)
  21. {
  22. this->lpStream = lpStream;
  23. if (lpStream)
  24. lpStream->AddRef();
  25. }
  26. inputStreamMAPIAdapter::~inputStreamMAPIAdapter()
  27. {
  28. if (lpStream)
  29. lpStream->Release();
  30. }
  31. size_t inputStreamMAPIAdapter::read(unsigned char *data, size_t count)
  32. {
  33. ULONG ulSize = 0;
  34. if (lpStream->Read(data, count, &ulSize) != hrSuccess)
  35. return 0;
  36. if (ulSize != count)
  37. this->ateof = true;
  38. return ulSize;
  39. }
  40. void inputStreamMAPIAdapter::reset()
  41. {
  42. LARGE_INTEGER move;
  43. move.QuadPart = 0;
  44. lpStream->Seek(move, SEEK_SET, NULL);
  45. this->ateof = false;
  46. }
  47. size_t inputStreamMAPIAdapter::skip(size_t count)
  48. {
  49. ULARGE_INTEGER ulSize;
  50. LARGE_INTEGER move;
  51. move.QuadPart = count;
  52. lpStream->Seek(move, SEEK_CUR, &ulSize);
  53. if (ulSize.QuadPart != count)
  54. this->ateof = true;
  55. return ulSize.QuadPart;
  56. }
  57. } /* namespace */