/* * Copyright 2014, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #include #include BDataPositionIOWrapper::BDataPositionIOWrapper(BDataIO* io) : BPositionIO(), fIO(io), fPosition(0) { } BDataPositionIOWrapper::~BDataPositionIOWrapper() { } ssize_t BDataPositionIOWrapper::Read(void* buffer, size_t size) { ssize_t bytesRead = fIO->Read(buffer, size); if (bytesRead > 0) fPosition += bytesRead; return bytesRead; } ssize_t BDataPositionIOWrapper::Write(const void* buffer, size_t size) { ssize_t bytesWritten = fIO->Write(buffer, size); if (bytesWritten > 0) fPosition += bytesWritten; return bytesWritten; } ssize_t BDataPositionIOWrapper::ReadAt(off_t position, void* buffer, size_t size) { if (position != fPosition) return B_NOT_SUPPORTED; return Read(buffer, size); } ssize_t BDataPositionIOWrapper::WriteAt(off_t position, const void* buffer, size_t size) { if (position != fPosition) return B_NOT_SUPPORTED; return Write(buffer, size); } off_t BDataPositionIOWrapper::Seek(off_t position, uint32 seekMode) { switch (seekMode) { case SEEK_CUR: return position == 0 ? B_OK : B_NOT_SUPPORTED; case SEEK_SET: return position == fPosition ? B_OK : B_NOT_SUPPORTED; case SEEK_END: return B_NOT_SUPPORTED; default: return B_BAD_VALUE; } } off_t BDataPositionIOWrapper::Position() const { return fPosition; } status_t BDataPositionIOWrapper::SetSize(off_t size) { return size == fPosition ? B_OK : B_NOT_SUPPORTED; } status_t BDataPositionIOWrapper::GetSize(off_t* size) const { return B_NOT_SUPPORTED; }