1/* 2 * Copyright 2014, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <DataPositionIOWrapper.h> 8 9#include <stdio.h> 10 11 12BDataPositionIOWrapper::BDataPositionIOWrapper(BDataIO* io) 13 : 14 BPositionIO(), 15 fIO(io), 16 fPosition(0) 17{ 18} 19 20 21BDataPositionIOWrapper::~BDataPositionIOWrapper() 22{ 23} 24 25 26ssize_t 27BDataPositionIOWrapper::Read(void* buffer, size_t size) 28{ 29 ssize_t bytesRead = fIO->Read(buffer, size); 30 if (bytesRead > 0) 31 fPosition += bytesRead; 32 33 return bytesRead; 34} 35 36 37ssize_t 38BDataPositionIOWrapper::Write(const void* buffer, size_t size) 39{ 40 ssize_t bytesWritten = fIO->Write(buffer, size); 41 if (bytesWritten > 0) 42 fPosition += bytesWritten; 43 44 return bytesWritten; 45} 46 47 48ssize_t 49BDataPositionIOWrapper::ReadAt(off_t position, void* buffer, size_t size) 50{ 51 if (position != fPosition) 52 return B_NOT_SUPPORTED; 53 54 return Read(buffer, size); 55} 56 57 58ssize_t 59BDataPositionIOWrapper::WriteAt(off_t position, const void* buffer, 60 size_t size) 61{ 62 if (position != fPosition) 63 return B_NOT_SUPPORTED; 64 65 return Write(buffer, size); 66} 67 68 69off_t 70BDataPositionIOWrapper::Seek(off_t position, uint32 seekMode) 71{ 72 switch (seekMode) { 73 case SEEK_CUR: 74 return position == 0 ? B_OK : B_NOT_SUPPORTED; 75 case SEEK_SET: 76 return position == fPosition ? B_OK : B_NOT_SUPPORTED; 77 case SEEK_END: 78 return B_NOT_SUPPORTED; 79 default: 80 return B_BAD_VALUE; 81 } 82} 83 84 85off_t 86BDataPositionIOWrapper::Position() const 87{ 88 return fPosition; 89} 90 91 92status_t 93BDataPositionIOWrapper::SetSize(off_t size) 94{ 95 return size == fPosition ? B_OK : B_NOT_SUPPORTED; 96} 97 98 99status_t 100BDataPositionIOWrapper::GetSize(off_t* size) const 101{ 102 return B_NOT_SUPPORTED; 103} 104